题目
给定一个数组,一个目标值,在数组中找出和为目标值的两个数,返回他们的下标
例如:输入 arr = [2,7,11] target = 13 返回 result = [0,2]
- 暴力枚举,两层for循环找出 i+j=13 即可返回数组 [i,j] 时间复杂度为O(n^2)
-
class Solution { public int[] twoSum(int[] nums, int target) { int n = nums.length; for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { if (nums[i] + nums[j] == target) { return new int[]{i, j}; } } } return new int[0]; } }
-
- HashMap做法 key存放数组中的是数字,value存放下标 遍历给定数组 判断map中是否含有 target-num[i] 有的话其实就已经找到了,此时返回 num[i]的下标和target-num[i] 的下标 没有的话就把当前数加入到map中
-
class Solution { public int[] twoSum(int[] nums, int target) { 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); } throw new IllegalArgumentException("No two sum solution"); } }
-