LeeCode算法练习--两数之和

  1. 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
    给定 nums = [2, 7, 11, 15], target = 9
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i=0; i < nums.length; i++){
            //保存数组的每一个数以及这个数下一个数的索引
            //保证key 和 value 都是唯一的 
            map.put(nums[i],i+1);
        }
        for(int i=0; i < nums.length; i++){
            int value = target - nums[i];//假设这个值符合要求,那么计算出另一个数的值A
            System.out.println("value = "+value);
            //这里map.get(value) != i+1 有些不明白
            //反过来想  :map.get(value)得到的是A的下一个数索引,如果等于了i+1,map中如果i+1对应的就是nums[i],说明value就是nums[i](自己跟自己相加等于target,属于违规)
            if(map.containsKey(value) && map.get(value) != i+1){

                int index = map.get(value);

                return new int[]{i,index-1};

            }        
        }
        return new int[0];
    }
}
    2.

猜你喜欢

转载自blog.csdn.net/dingshuhong_/article/details/80346954
今日推荐