code - 两数之和匹配目标值

2020-04-11  本文已影响0人  BestFei

Q:给定一个整数数组 nums 和一个目标值 target,请在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

A:定义一个map存储数组中每个值对应的差值和自己的游标。
然后数组中每个值再去跟这个map的差值去匹配,匹配成功则返回游标

public class FindValue {
    public static int[] twoSum(int[] nums, int target) {
        if (nums == null || nums.length <= 1) {
            return new int[2];
        }
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        // key 为每个数组对应的差值,value为数组的游标
        for (int i = 0; i < nums.length; i++) {
            map.put(target - nums[i], i);
        }
        // 数组里的每个值去和差值匹配,匹配上则返回差值对应数组里的游标
        for (int i = 0; i < nums.length; i++) {
            Integer v = map.get(nums[i]);
            // can't use itself
            if (v != null && v != i) {
                // 返回的是两个游标
                return new int[] { i , v };
            }
        }
        return null;
    }

    public static void main(String[] args) {
        int[] nums = {2,3,5,7,11};
        int target = 9;
        int[] result = twoSum(nums,target);
        System.out.println(nums[result[0]]+"+"+nums[result[1]]+"="+target);
    }

}
上一篇 下一篇

猜你喜欢

热点阅读