LeetCode - 1. Two Sum(Hash)

发布于 2024-08-18 04:04:44 字数 1749 浏览 9 评论 0

题目

方法一

使用 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] ,这样就不要一开始就存一次所有的下标。

比如:

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;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

乜一

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文