(LeetCode)算法学习- 两数之和分析

初学算法,一脸懵逼,在LeetCode上只能靠看着别人的代码,然后去学习。

题目:

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

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

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

答案以及分析注释:

class Solution {
     
	// target = x - y;
    public int[] twoSum(int[] nums, int target) {
     
    	//声明一个长度为2的数组,作为返回
        int[] indexs = new int[2];
        //new一个Map,用于存储遍历的数据
        //Key = target - nums[index]  通过计算得到y的值,根据
       	//Value = index  x的下标
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
     
        	//判断Map中是否存在以当前下标的值作为Key的数据
        	//满足条件,即找到了y
            if(map.containsKey(nums[i])){
     
                indexs[0] = map.get(nums[i]);//根据y的值作为Key获取x的下标
                indexs[1] = i;//再将y的下标赋值给indexs数组
                return indexs;
            }
            //条件不满足时,将根据target-nums[i]作为Key,i作为Value的形式存入Map
            map.put(target-nums[i],i);
        }
        return indexs;
    }
}

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum

你可能感兴趣的:(算法学习,算法)