前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每日一道leetcode:1. 两数之和

每日一道leetcode:1. 两数之和

作者头像
felixzhao
发布于 2023-03-13 01:44:33
发布于 2023-03-13 01:44:33
23200
代码可运行
举报
文章被收录于专栏:null的专栏null的专栏
运行总次数:0
代码可运行

1. 题目(简单)

原题连接

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6 输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6 输出:[0,1]

提示:

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

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

2. 分析与解答

本题被标注为简单题,对于本题,是需要找到两个数,最简单的分析就是有两个指针不断循环遍历数组,如下图所示:

设置指针i指向当前值,指针j指向始终从指针i的下一个位置开始,这样需要双重循环,时间复杂度为O(n2)。

要想减少时间复杂度,可以利用空间换时间,可以将已经遍历过的存储下来并且方便查询,可以使用map存储已经遍历的数,其中,key为数值,value为在原数组中的位置。对于当前遍历的数nums[i],在map中查找target-nums[i]。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        map<int, int> mp;
        vector<int> res;
        for (int i = 0; i < n; i++) {
            if (i > 0 && mp.find(target-nums[i]) != mp.end()) {
                res.push_back(i);
                res.push_back(mp[target-nums[i]]);
                break;
            } else {
                mp[nums[i]] = i;
            }
        }
        return res;
    }
};

这样时间复杂度为O(n)。

发散:如果本题中的数组是排好序的,如示例1,那么可以使用头尾双指针,这样只需要一次遍历,即如下图所示:

如果当前指针i和指针j的和等于target,则返回i和j的值;如果当前指针i和指针j的和小于target,则i++;否则j–。在这里要返回位置,如果先排序将破坏原来的顺序,还得存储原先的位置信息,不如上述的map方案。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【力扣刷题】1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
jayjay
2022/11/02
1630
【力扣刷题】1. 两数之和
两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
狼啸风云
2023/11/03
1570
【LeetCode热题100】两数之和 C++
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
叶茂林
2023/11/02
2460
力扣1-两数之和&力扣15-三数之和
原题链接:https://leetcode.cn/problems/two-sum/
WuShF
2023/02/23
6070
力扣1-两数之和&力扣15-三数之和
Leetcode算法系列| 1. 两数之和(四种解法)
游戏开发小Y
2024/01/18
2510
Leetcode算法系列| 1. 两数之和(四种解法)
【每日一题】【leetcode】5. 数组-两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 难易程度:easy
aneutron
2022/08/10
1760
【小Y学算法】⚡️每日LeetCode打卡⚡️——1.两数之和
看了题目,很自然的就会想到,只要进行两层循环,对所有的数字进行一次相加,当和为target时,将两个值的index返回即可
呆呆敲代码的小Y
2021/08/20
3060
【小Y学算法】⚡️每日LeetCode打卡⚡️——1.两数之和
LeetCode 1. 两数之和【新方式】
https://leetcode-cn.com/problems/two-sum/
freesan44
2021/10/04
3340
LeetCode 1. 两数之和【新方式】
LeetCode 1. 两数之和(哈希)
题目链接:https://leetcode-cn.com/problems/two-sum/
Michael阿明
2021/02/20
1840
LeetCode 1. 两数之和(哈希)
leetcode 两数之和、三数之和、最接近的三数之和、四数之和
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 最容易想到的方法是用一个双重循环来枚举数组中两两组合的情况,然后判断和是否为 target ,时间复杂度是 O(n^2)。 我们还可以先对数组元素从小到大升序排序,然后在一个循环中利用头尾指针扫描排序后的数组,每次扫描比较两个数的和和 target 的值。因为需要得到元素的排序前下标,所以用一个结构体数组来保存数组元素的值和未排序之前元素所在下标,这样的话采用快速排序,时间复杂度为 O(n*logn),空间复杂度为 O(n)。
指点
2019/01/18
2.8K0
轻松拿下两数、三数、四数和N数之和 | 必备算法
时间复杂度:O(N^2),其中N是数组中的元素数量。最坏情况下数组中所有数都需要被匹配 空间复杂度:O(1)
程序员荒生
2022/03/04
3880
LeetCode 01两数之和&02两数相加
法一:暴力法 把所有两两配对的问题全部遍历出来,知道找到满足题意得结果为止,时间复杂度O(n2)
bigsai
2020/08/10
4270
Leetcode第1题 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
郭顺发
2023/07/17
850
LeetCode 热题 100 - 两数之和
陈明勇
2025/01/26
2144
【刷穿 LeetCode】1. 两数之和(简单)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
宫水三叶的刷题日记
2021/02/20
3440
《leetcode第一题》之两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
星宇大前端
2021/04/29
2790
LeetCode-1 两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例:
用户3470542
2019/06/26
6520
LeetCode-1 两数之和
【每日一算法】(四)两数之和,使用map实现
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
被测试耽误的大厨
2023/11/17
1460
【每日一算法】(四)两数之和,使用map实现
数据结构与算法 -4、5 :两数相加&&两数之和
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
石璞东
2020/05/22
7740
数据结构与算法 -4、5 :两数相加&&两数之和
算法步步为营(1)-两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
JavaEdge
2022/09/27
1930
相关推荐
【力扣刷题】1. 两数之和
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验