1. 两数之和
暴力枚举
时间复杂度 O(n^2),
执行用时:55 ms, 在所有 Java 提交中击败了28.85%的用户 内存消耗:38.4 MB, 在所有 Java 提交中击败了85.38%的用户
class Solution {public int[] twoSum(int[] nums, int target) {for (int i = 0; i < nums.length - 1; i++) {for (int j = i + 1; j < nums.length; j++) {if (nums[i] + nums[j] == target) return new int[] {i, j};}}return null;}}
哈希表
上面方法复杂度高的原因在于查找 nums[i] + nums[j] == target 这步操作的复杂度过高,可以考虑使用哈希表把这步操作优化为 O(1)
执行用时:4 ms, 在所有 Java 提交中击败了52.84%的用户 内存消耗:39.7 MB, 在所有 Java 提交中击败了5.04%的用户
class Solution {public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i], i);}for (int i = 0; i < nums.length - 1; i++) {Integer exists = map.get(target - nums[i]);if (exists != null && exists != i) {return new int[]{i, exists};}}return null;}}
