前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 01 - Two Sum

LeetCode - 01 - Two Sum

作者头像
Cellinlab
发布2023-05-17 14:41:29
1330
发布2023-05-17 14:41:29
举报
文章被收录于专栏:Cellinlab's BlogCellinlab's Blog

# Two Sum

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

代码语言:javascript
复制
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

代码语言:javascript
复制
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

代码语言:javascript
复制
输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

# 暴力枚举

# 思路

遍历数组中每一个数 x,寻找是否存在 target - x。注意,因为 x 数之前的元素已经做过检查,因此不需要再匹配,只需要在 x 之后的元素中查找即可。

# 实现

代码语言:javascript
复制
const twoSum = function (nums, target) {
  for (let i = 0; i < nums.length; i++) {
    let x = nums[i];
    for (let j = i + 1; j < nums.length; j++) {
      let y = nums[j];
      if (x + y === target) {
        return [i, j];
      }
    }
  }
  return [];
}

# 复杂度

  • 时间:O(N2),n 是数组中元素的数量。最坏的情况下数组中任意两个数都要被匹配一遍
  • 空间:O(1)

# 哈希缓存

# 思路

暴力遍历方法中,由于没有记录已经遍历过的值的信息,会导致时间复杂度过高。使用哈希表可以将寻找 target - x 的时间复杂度从 O(N) 降到 O(1)。

创建哈希表,对于每一个数 x,先检查哈希表中是否存在期望的 target - x,如果存在就返回当前 x 的索引和哈希表中记录的 target - x 对应的索引;如果未找到,则将 x 及对应索引值存入哈希表。

# 实现

代码语言:javascript
复制
const twoSum = function (nums, target) {
  const map = {};
  for (let i = 0; i < nums.length; i++) {
    let x = nums[i];
    if (map[target - x] !== undefined) {
      return [map[target - x], i];
    } else {
      map[x] = i;
    }
  }
  return [];
};

注意!!!

代码语言:javascript
复制
const map = { 2: 0 };
map[2] == false; // true
if (map[2]) {
  // 不会走到这里
  console.log('true');
}

# 复杂度

  • 时间:O(N),N 是数组中元素的数量,对于每一个元素 x,可以 O(1) 地寻找 target - x
  • 空间:O(N),哈希表的大小为 N
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020/7/29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # Two Sum
  • # 暴力枚举
    • # 思路
      • # 实现
        • # 复杂度
        • # 哈希缓存
          • # 思路
            • # 实现
              • # 复杂度
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档