LeetCode - 1. Two Sum(Hash)

LeetCode - 1. Two Sum(Hash)

  • 方法一
  • 方法二

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

题目链接

题目

LeetCode - 1. Two Sum(Hash)_第1张图片

方法一

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

class Solution {

    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        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)_第2张图片

class Solution {

    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        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;
    }
}

你可能感兴趣的:(数据结构,LeetCode)