leetcode - 1 两数之和

Leetcode 1解题思路以及代码整理 Two Sum Description Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you... 阅读详情
思路

由于是求数组中两数之和为S,所以正常情况下可以对这个数组进行排序,然后使用双索引,数组第一个元素和最后一个元素求和,当和为S时皆大欢喜,如果和大于S的话则表明和太小了,于是前面的索引向后移动,如果和小于S的话则表明和太大了,于是后面的索引向前移动,最终当两个索引相同时结束(因为同一个数只能选择一次,所以当索引相同时循环结束)

难点
  • 因为这里是返回原数组中的索引,而如果对数组进行排序后则索引会丢失,所以使用map保存索引(pair为值-索引)
  • 数组中值可能相同,比如数组中第一个1传进map,第二个1又传进map,则后面一个1的索引会覆盖前一个1的索引,这样当S为2时,可能就是两个1的和,而map中只存了一个1,所以需要将所有的1都保存,这里使用multimap
#include <vector>
#include <iostream>
#include <map>
using namespace std;

class Solution {
public:
	vector<int> twoSum(vector<int>& nums, int target) {
		multimap<int, int> m;
		for (int i = 0; i < nums.size(); i++)
			m.insert(make_pair(nums[i], i));
		map<int, int>::iterator begin = m.begin();
		map<int, int>::iterator end = --m.end();
		while (begin != end) {
			if (begin->first + end->first == target) {
					int res[2] = { begin->second,end->second };
					return vector<int>(res, res + 2);
			}
			else if (begin->first + end->first > target) {
				end--;
			}
			else if (begin->first + end->first < target) {
				begin++;
			}
		}
		// leetcode要求必须返回,即使这里永远也运行不到
        return vector<int> ();
	}
};

int main() {

	const int nums[] = { 3,2,4 };
	vector<int> nums_vec(nums, nums + sizeof(nums) / sizeof(int));
	int target = 6;

	vector<int> res = Solution().twoSum(nums_vec, target);
	cout << res[0] << " " << res[1] << endl;
	system("pause");
	return 0;
}
c++ leetcode 力扣 1. 两数之和 这是力扣的第一题 两数之和 题目是这么描述的: 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 阅读详情

相关推荐

力扣(Leetcode)第1题:两数之和(C语言版本)

题目: 给定一个整数数组 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

qq_39855356的博客 3313

Leetcode 1:两数之和(最详细解决方案!!!)

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解题思路 首先想到的解决思路是通过两次循环,每次循环遍历列表,这种算法的时间复杂度是O(...

coordinate的博客 1万+

力扣leetcode top100 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], targe...

m0_51363047的博客 562

【LeetCode】1.Two Sum思路以及知识点复习

Given an array of integers, return indices ofthe two numbers such that they add up to a specific target. You may assume that each input would have exactly onesolution, and you may not use the same element twice.

FENG_LIN的博客 420

力扣1. 两数之和——《解题者:力扣解题之路》

前言:不同于某些OJ,力扣第一题对初学者不是很友好,初次看到它,可能一时想不到思路——但须知万事开头难,走出第一步,即相当于成功一半—— 而:我将为你认认真真地解开它ヾ(◍°∇°◍)ノ゙ ...

01解题者~博客 4224

【简单】力扣算法题解析LeetCode1:两数之和

本文介绍了在整数数组中寻找两数之和等于目标值的算法。通过哈希表优化查找过程,将时间复杂度从O(n²)降至O(n)。关键思路是边遍历边检查补数是否存在,避免重复计算。Java实现中预分配哈希表容量,单次遍历时先检查后存储,确保高效性和正确性。算法通过示例验证,时间复杂度O(n),空间复杂度O(n)。

ylumwd的博客 713

day1_leetcode1

Leetcode第一题 1. 题目:           2. 我的第一思路是利用两次循环,将列表中的数两两相加,如果出现和为target,则返回。注意,由题目的意思,默认结果是只 有一对符合题意的,所以直接可以return的。所以下面是我的第一个解法: class Solution: def twoSum(self, nums, target):    ...

乙壳虫的博客 2768

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

Leetcode1.两数之和(思路超详细!!!)

题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 思路1: 暴力...

脸圆圆很可爱的博客 448

单精度浮点数存储、双精度浮点数存储

单精度浮点数存储、双精度浮点数存储

fancynthia的博客 1315

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 484

LeetCode力扣真题解惑第2篇 —— 力扣第1题:两数之和

LeetCode力扣真题解惑第2篇 —— 力扣第1题:两数之和 1. 两数之和。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode) 链接:https://le

浮生若梦,云游四方 790

ADC电路项目1——10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8

包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。本设计采用 smic18mmrf CMOS 工艺,使用栅压自举电路的采样开关,Vcm-based 开关。电容开关控制电路,10 位 DFF,最后用 10 位理想 DAC 模块将数字码转换为 10 进制量进。时序上级板采样的 DAC 电容阵列,两级动态比较器,比较器异步时钟,SAR 动态逻辑,DAC。10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8。

qq_48407979的博客 815

【力扣】1、两数之和

系列文章目录 【力扣】1、两数之和 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

一个卑微的java开发 1549

PLC凸轮开关指令编程应用——控制算法

凸轮开关指令的作用是在PLC程序中根据凸轮开关(Cam Switch)的状态执行不同的操作。凸轮开关通常是机械式的开关装置,它的位置会随着机械运动的变化而改变。凸轮开关的状态可以用来检测机器的位置、角度或其他相关信息,从而触发相应的控制动作。总结起来,凸轮开关指令是PLC编程中常用的一种控制算法,通过检测凸轮开关的状态来触发相应的操作。本文将介绍凸轮开关指令的应用和相应的控制算法,并提供相关的源代码示例。在这个示例中,凸轮开关状态的值代表不同的位置,根据凸轮开关状态的不同,执行相应的动作。

LiJavascript的博客 1035

QGis二次开发 —— 1、win10/win11搭建Vs2017-QGis3.40.12环境(附Vs2017环境效果,附全部问题解决方法)(附:Qt助手加入QGis接口说明文档)

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGisA接口说明文档)

1362

Leetcode力扣——1.两数之和

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

qq_52222102的博客 1998

C#串口通信从入门到精通(11)——串口接收的数据存储到本地文件(txt、csv)

本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!

qq_34059233的博客 7239

leetcode/力扣第1题 两数之和

malloc(2*sizeof(int)),这就是请求了两个int大小的内存,它默认返回void*,也就是无类型定义的,所以需要强制转换一下。如(int*)malloc(2*(sizeof(int)));所以 int* result = (int*)malloc(2*sizeof(int));和free的使用,malloc本质是在堆上请求分配内存,请求多大的呢,比如。:把任意大小的数据,通过某种函数映射成固定大小的值,这个值就是。:用哈希值快速索引数据的结构。找到,返回 [0,1]

m0_49366142的博客 466

零基础学习CANoe Panel(5)——改变变量的值,控件图像也改变,这是怎么回事?

Panel 中控件的图像随着值变化,是怎么回事?

蚂蚁小兵 2146

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

1. 两数之和(力扣LeetCode)

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。但是,数组中同一个元素在答案里不能重复出现。

m0_73841621的博客 1293

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

day26【LeetCode力扣】1.两数之和

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。整数,并返回它们的数组下标。

canGfly的博客 1236

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【力扣LeetCode】1 两数之和

题目描述(难度易) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 链...

Jiewang的博客 233

每日一题一一LeetCode1. 两数之和 - 力扣(LeetCode)

我们可以创建一个Hash表,遍历nums数组,每次询问Hash表中是否存在(target-nums[i]),如果存在,直接返回下标值即可。如果不存在就当前元素为键,其对应的下标为值放入哈希表中。本题的要求是给你一个数组,然后让你从中找出两个值,他们的和为target,然后返回这两个数的下标。直接双层遍历,取两个不同的数组中的元素相加为target,直接返回它的下标。

blue的博客 437

力扣LeetCode:Python3代码解析 — 1.两数之和

力扣LeetCode:Python解题 — 1.两数之和两数之和解法一:双循环解法二:缓存数值结果对比 两数之和 难度:简单 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解法一:双

Senimo 759

【LeetCode热题100】1.两数之和

两数之和 题号:1 难度:简单 标签:数组、哈希表 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] (1)第一次解题代码,暴力解法(Java) class Solution {

mosoup的博客 382
上一篇: 1.时间复杂度与空间复杂度概要
下一篇: 15 三数之和
菜鸟方圆圆
博客等级 码龄10年 26粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值