欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode-1. Two Sum(Hash表)

程序员文章站 2022-07-15 14:15:11
...

LeetCode-1. Two Sum(Hash表)

  • 方法一
  • 方法二


    还可以使用Hash表解决类似的进阶问题

方法一

使用HashMap存储每个数的下标,然后遍历数组,寻找target - nums[i]在map中存不存在,如果存在,记为L,说明存在L+nums[i] = target,这样遍历时间复杂度为O(n)。

  public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer>map = new HashMap<Integer,Integer>();
        int[] res = {0,0};
        for(int i = 0; i < nums.length; i++){
            map.put(nums[i],i);
        }
        for (int i = 0; i < nums.length; i++) {
            int L = target - nums[i];
            if(map.containsKey(L) && map.get(L) != i){
                res[0] = map.get(L);
                res[1] = i;
                break;
            }
        }
        return res;
    }

方法二

也是使用HashMap,但是我们可以一开始不存上每个数的下标,而是在遍历到nums[i]的时候,我们就查nums[i]在哈希表中存不存在,最后存上target-nums[i],这样就不要一开始就存一次所有的下标。
比如:
LeetCode-1. Two Sum(Hash表)

    public int[] twoSum(int[] nums,int target){
        Map<Integer,Integer>map = new HashMap<Integer,Integer>();
        int[] res = {0,0};
        for (int i = 0; i < nums.length; i++) {
            if(map.containsKey(nums[i])){
                res[0] = map.get(nums[i]);
                res[1] = i;
                break;
            }
            map.put(target-nums[i],i);
        }
        return res;
    }
相关标签: TwoSum Hash表