Two Sum

Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].

利用 HashMap 作为存储,键为目标值减去当前元素值,索引为值,比如 i = 0 时,此时首先要判断 nums[0] = 2 是否在 map 中,如果不存在,那么插入键值对 key = 9 - 2 = 7, value = 0,之后当 i = 1 时,此时判断 nums[1] = 7 已存在于 map 中,那么取出该 value = 0 作为第一个返回值,当前 i 作为第二个返回值,具体代码如下所示。

class Solution 
{
	public static void main(String[] args) 
	{
		System.out.println(new Solution().twoSum(new int[] {2,7,11,15}, 9));
	}
	
	public int[] twoSum(int[] nums,int target)
	{
		HashMap<Integer, Integer> map = new HashMap<>();
		
		for(int i=0;i<nums.length;i++)
		{
			if(map.containsKey(nums[i]))
			{
				return new int[] {map.get(nums[i]),i};
			}
			else
			{
				map.put(target-nums[i], i);
			}
		}
		return null;
	}

// 两重循环进行查找
//    public int[] twoSum(int[] nums, int target) 
//    {
//    	for (int i=0;i < nums.length;i++)
//    	{
//    		for(int j=i+1;j < nums.length;j++)
//    		{
//    			if(nums[i]+nums[j]==target)
//    			{
//    				return new int[] {i,j};
//    			}
//    		}
//    	}
//    	return null;
//    }
}