很明显暴力的解法是两层for循环查找,时间复杂度是O(n^2)。这里使用map集合来实现。
由此我们知道:
两数之和使用的是map,三数和四数之和使用的是双指针方法降低一层循环。
public int[] twoSum(int[] nums, int target) { int[] res = new int[2]; if(nums == null || nums.length == 0){ return res; } Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < nums.length; i++){ int temp = target - nums[i]; if(map.containsKey(temp)){ res[1] = i; res[0] = map.get(temp); } map.put(nums[i], i); } return res; }