leetCode算法——1TwoSum(两数之和)

描述:

给定一个整数数组 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 }

猜你喜欢

转载自www.cnblogs.com/liushiqiang123/p/11815795.html