Example
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
public int[] twoSum(int[] nums, int target) {
int result[]=new int[2];
HashMap<Integer,Integer> map=new HashMap();
int i=0;
while(i<nums.length){
if(map.containsKey(target-nums[i]))
{
result[0]=map.get(target-nums[i]);
result[1]=i;
return result;
}
map.put(nums[i], i);
i++;
}
return result;
}
时间复杂度o(n),空间复杂度n
这里数组是没有顺序的,所以不能直接从利用从首和尾部同时遍历的方法
不过可以加点条件来实现
public int[] twoSum(int[] nums, int target) {
int[] nums2 = nums.clone();//克隆
Arrays.sort(nums2);
int first = 0, second = nums.length - 1;
while (nums2[first] + nums2[second] != target) {
if (nums2[first] + nums2[second] > target)
second--;
else
first++;
}
int k = 0;
int[] result = {0, 0};
for (int i = 0; i < nums.length; i++)
if (nums[i] == nums2[first] || nums[i] == nums2[second])
result[k++] = i;
return result;
}
在leetcode上第二个方法还快了1毫秒