例如: list = [4,6,8] num = 10 [0,1] 因为4+6=10,也就是list[0]+list[1]=10 所以输出[0,1]
方法一:最简单直接的就是使用两个for循环对数组进行遍历(缺点:两个for循环的时间复杂度会很大)
public int[] twoSum(int[] list, int num) {
for (int i = 0; i < list.length - 1; i++) {
for (int j = i + 1; j < list.length; j++)
if (list[i] + list[j] == num)
return new int[]{i, j};
}
return new int[]{-1, -1};
}
方法二:使用哈希表,哈希表是根据键(key)而直接访问在内存存储位置的数据结构,也就是说,它通过计算一个关于键值的函数,将所需查询的数据 映射 到表中一个位置来访问记录,这加快了查找速度。
思路:跟方法一相似,遍历数组并使用put方法将list的整数和相对应下标存储到哈希表中,然后在数组中寻找num-list[i],使用哈希表可以直接获取num-list[i]在数组中的位置,最后返回两个下标就可以了。
public int[] twoSum(int[] list, int num) {
Map m = new HashMap<>();
for (int i = 0; i < list.length; i++) {
if (m.get(num - list[i]) != null) {
return new int[]{m.get(num- list[i]), i};
}
m.put(list[i], i);
}
return new int[]{0, 0};
}



