日常记录——leetcode- 两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

代码:

 public static int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        HashMap<Integer,Integer> num = new HashMap<>();
        for(int i = 0,length = nums.length; i<length; i++){
            if(num.containsKey(target-nums[i]) ){
                result[0]=num.get(target-nums[i]);
                result[1]=i;
                break;
            }
            if(!num.containsKey(nums[i])){
                num.put(nums[i],i);
            }
        }
        return result;
    }

效果图:
日常记录——leetcode- 两数之和_第1张图片
优化后:

public static int[] twoSum(int[] nums, int target) {
        //创建返回数组
        int[] result = null;
        //创建填装数组《值,索引》map
        HashMap<Integer,Integer> num = new HashMap<>();
        for(int i = 0,length = nums.length; i<length; i++){
            //判断是否存在差值,即是否存在与i相加为target的数
            if(num.containsKey(target-nums[i]) ){
                //存在根据key(值)放入对应value(索引),及当前数
                result = new int[]{num.get(target-nums[i]),i};
                break;
            }
            //不存在填装到map
            num.put(nums[i],i);
        }
        return result;
    }

LeetCode执行结果
日常记录——leetcode- 两数之和_第2张图片

你可能感兴趣的:(LeetCode)