1.两数之和的时间复杂度的为O(n)的解法:
class Solution {
public int[] twoSum(int[] nums, int target) {
final int len = nums.length;
Map<Integer, Integer> map = new HashMap<>(len);
for (int i = 0; i < len; i++) {
int num = nums[i];
int r = target - num;
Integer index = map.get(r);
if (index == null) {
map.put(num, i);
} else {
return new int[]{i, index};
}
}
return new int[2];
}
}
使用了Map(存、取、查的最优时间复杂度都是O(1),key是数,value是数的下标,大致思想就是,把遍历到的数全放入Map,继续遍历时从Map中查找是否有相加等于目标数的数(key),如果有就返回它的value(下标)和目前遍历到的数的下标,如果没有就继续循环,直到找到为止。
主要是利用了Map存、取、查都很高效的特点,代替了双层循环遍历数组带来的开销。