LeetCode1. 两数之和
一、题目描述
二、解法
class Solution { public int[] twoSum(int[] nums, int target) { /** * 方法1:暴力枚举。 * 时间复杂度O(n^2),空间复杂度O(1) */ /*for (int i = 0; i < nums.length; i++) { for (int j = i+1; j < nums.length; j++) { if (nums[j] == target - nums[i]) { return new int[]{i,j}; } } } return new int[]{-1,-1};*/ /** * 方法2:哈希表 * 时间复杂度O(n),空间复杂度O(n) * 注意先判断,再存入。否则出现 [3,2,4] 6 返回[0,0]的情况,即当前元素使用了两次。 */ Map<Integer,Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { if (map.containsKey(target - nums[i])) { return new int[]{map.get(target-nums[i]), i}; } map.put(nums[i], i); } return new int[]{-1,-1}; } }