最近开始刷leetcode,做到有意思的就来记录一下:
two sum问题就是给一个随机的数组,判断其中两个的和是否等于target的值,如果是就返回两个数组的下标的集合。
比如[1,2,4,5] ,target =9 ,则返回是[2,3]
第一眼看到这个题肯定是觉得用暴力解最简单直接,但是果不其然是不通过的0.0
public int[] twoSum(int[] nums, int target) {
int ci=0 ,cj=0;
for(int i = 0;i<nums.length;i++)
{
for(int j = i;j<nums.length;j++)
{
if(nums[j]+nums[i]==target)
{
ci = i;
cj = j;
break;
}
}
}
int result[] ={ci,cj};
return result;
}
其算法的时间复杂度是o(n^2),果不其然超时了。后来发现大佬利用HashMap来解。从头开始树,如果匹配成功就返回,不匹配就入map中。还是蛮好理解的,算法时间复杂度也成功降到了o(n).成功提交通过。
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i =0;i<nums.length;i++)
{
int num = target - nums[i];
if(map.containsKey(num))
{
int index = map.get(num);
return new int []{index,i};
}
else map.put(nums[i], i);
}
throw new IllegalArgumentException("No solution");
}
以后每周至少会刷一两题,从简单的开始。从现在开始记录!