链接:力扣
一:暴力求解yyds最好理解。虽然但是效率低
class Solution {
public int[] twoSum(int[] nums, int target) {
int n=nums.length;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(nums[i]+nums[j]==target){
return new int []{i,j};
}
}
}return new int[0] ;
}
}
我的理解就是库库一顿加,找到合适的就记录下来,等到都走过一遍之后,将数据呈现在控制台
二:使用哈希表;
这段汉字可以理解:创建一个哈希表,对于每一个 x
,我们首先查询哈希表中是否存在 target - x
,然后将 x
插入到哈希表中,即可保证不会让 x
和自己匹配。
就是找目标值和数组中元素的差值在数组中存不存在,
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();//这个忘得差不多了,创建个话说map的集合?,里面是泛型
for (int i = 0; i < nums.length; i++) {//这里为什么++i和i++都能通过,想起来了,似乎是执行顺序导致他们效果是一样的
if (hashtable.containsKey(target - nums[i])) {//这里不太明白,这个集合里面怎么就会有数据了呢
return new int[]{hashtable.get(target - nums[i]), i};
}
hashtable.put(nums[i], i);
}
return new int[0];
}
}
代码有点蒙,一些方法什么意思都不记得了,算法真的难搞啊,这还是比较简单的,等会把哈希表瞅瞅