准备开始征服leecode了
目前的想法是做 leecode hot100
- 两数之和
两数之和
在最开始拿到的时候想排序,然后遍历,得到结果,但是这里排序会改变下标的值,于是失败。
代码如下
public int[] twoSum(int[] nums, int target) {
Arrays.sort(nums);
int[] sulution = new int[2];
for (int i = 0; i < nums.length-1; i++) {
int num = nums[i];
for (int j = i+1; j < nums.length; j++) {
int numLast = nums[j];
if(num + numLast == target){
sulution[0] = i;
sulution[1] = j;
}
if (numLast +num > target)
break;
}
}
return sulution;
}
然后第二种想法就是暴力穷举,两个for循环,当然,成功,但是效率低下
public int[] twoSum(int[] nums, int target) {
int[] sulution = new int[2];
for (int i = 0; i < nums.length-1; i++) {
int num = nums[i];
for (int j = i+1; j < nums.length; j++) {
if (num + nums[j] == target){
sulution[0]=i;
sulution[1]=j;
return sulution;
}
}
}
return new int[2]{};
}
然后没啥想法了 看了题解之后可以使用map,于是看完后实现,效率确实高了很多
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
for (int i = 0; i < nums.length; i++) {
if (hashmap.containsKey(target-nums[i]))
return new int[]{i,hashmap.get(target-nums[i])};
//key:value 数字:下标
hashmap.put(nums[i],i);
}
return new int[]{};
}
在写这个的时候突然觉得可以采用排序加map来实现一次遍历,这样的话需要用map来存数字和下标,然后将数字和下标一起排序,但是好像这样的话效率肯定是没有直接使用map好的,因为这样写首先还是要存到map里面再找一次,不如直接使用map来得快。
标签:map,target,第一天,nums,int,征服,leecode,new,sulution From: https://www.cnblogs.com/Dumbo/p/17138312.html