描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
实例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
思路:
1.两次循环遍历数组中元素,查找合适的值返回对应下标时间复杂度O(n^2)
2.哈希表存储,依次将数组中的元素的补数(target - nums[i])作为key,下标i作为value存入。并且判断当前元素nums[i]是否已经存储,如果存在也就意味着当前元素肯定是数组中某一元素的补数,则只需返回当前元素下标i和补数下标即可。时间复杂度O(n)
class Solution { public int[] twoSum(int[] nums, int target) { //数组长度 int length = nums.length; //两个元素的和 int sum = 0; //返回的数组 int [] answer = new int[2]; for(int i = 0;i < length;i++){ for(int j = i + 1; j < length; j++){ if(nums[i] + nums[j] == target){ answer[0] = i; answer[1] = j; } } } return answer; } }
1 import java.util.HashMap; 2 import java.util.Map; 3 class Solution { 4 public int[] twoSum(int[] nums, int target) { 5 int [] index = new int[2]; 6 HashMap<Integer,Integer>hashMap = new HashMap<Integer,Integer>(); 7 for(int i = 0; i < nums.length; i++){ 8 9 //当前元素在哈希表中,即当前元素是某一个元素的补数 10 if(hashMap.containsKey(nums[i])){ 11 //当前元素的下标 12 index[0] = i; 13 //当前元素补数的下标 14 index[1] = hashMap.get(nums[i]); 15 return index; 16 } 17 //存放每一个元素的补数作为key,该数的下标作为value 18 hashMap.put(target - nums[i],i); 19 } 20 return index; 21 } 22 }