TwoSum---LeetCode进阶路①
LeetCode敲门题:
- 题目:
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].
- 思路分析:毕竟是第一道题目,很是温柔,无甚难度,但是直接法的时间见下图
时间复杂度O(n^2),非常不酷的讲,那么如何优化呢?
小陌是用map属性,进行边存边找
话不多说,看效果先
时间复杂度降到O(n),如果觉得效果还过得去,想瞄几眼源码 ,接着往下瞧:
public class Solution {
public static void main(String[] args){
int[] nums = {2,7,11,15};
int target = 9;
int[] result = new Solution().twoSum(nums,target);
for(int i=0;i<result.length;i++){
System.out.print(result[i]+" ");
}
}
public int[] twoSum(int[] nums,int target){
int[] result = new int[2];
//巧用map的映射,边存边找
HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
if(hm.get(target-nums[i])!=null){
result[0] = hm.get(target-nums[i]);
result[1] = i;
break;
}
else{
hm.put(nums[i],i);
}
}
return result;
}
}