LeetCode 题目之 数组两数之和问题

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

LeetCode上的一个题:

给定一个数组,寻找在这个数组中是否存在两个数之和为某个定值。

要点:

1、一个数就是一个数,比如[2, 1],寻找和为4时,不能使用2+2。

2、需要输出位置。


排序方法


首先排序,然后按照编程之美中提到的方法进行处理。代码如下.

#include<iostream>
#include<string>
#include<vector>
using namespace std;

class node
{
public:
	int id;
	int value;
public:
	node(int a, int b):id(a), value(b){}
	friend bool operator < (const node &a, const node &b) { return a.value < b.value;}
};

vector<int> twoSum(vector<int> vs, int target)
{
	const int s = vs.size();
	vector<int> ret;
	vector<node> temp;
	for (int i = 0; i < s; ++i)
		temp.push_back(node(i+1, vs[i]));
	sort(temp.begin(), temp.end());

	for (int b = 0, e = s - 1; b < e; )
	{
		const int v = temp[b].value + temp[e].value;
		if (v == target)
		{
			if (temp[b].id < temp[e].id)
			{
				ret.push_back(temp[b].id);
				ret.push_back(temp[e].id);
			}
			else
			{
				ret.push_back(temp[e].id);
				ret.push_back(temp[b].id);
			}
			
			return ret;
		}
		else if (v < target)
		{
			++b;
		}
		else --e;
	}
	return ret;
}
需要注意的时,放入结果时大小的顺序,要求是按照索引从小到大的顺序放到vector中。

建立hash方法

首先遍历整个数组,然后建立一个hash表,再在这个hash表中查找给定和为s的两个值。比如a 与 s - a如果同时存在,则可。

#include<stdio.h>
#include<stdlib.h>
#include<set>
#include<iostream>
#include<hash_map>
using namespace std;
using namespace stdext;

vector<int> twoSum(vector<int> vs, int target)
{
	hash_map<int, int> rec;
	vector<int> ret;
	const int s = vs.size();
	for (int i = 0; i < s; ++i)
		rec.insert(pair<int, int>(vs[i], i + 1));
	for (int i = 0; i < s; ++i)
	{
		const int v = vs[i];
		hash_map<int, int>::iterator iter = rec.find(target - v);
		if (rec.end() != iter && iter->second != (i+1))
		{
			const int j = iter->second;
			if (i < j) {ret.push_back(i+1); ret.push_back(j);}
			else {ret.push_back(j); ret.push_back(i+1);}
			return ret;
		}
	}
	return ret;
}


int main(void)
{
	int a[] = {150,24,79,50,88,345,3};
	vector<int> vs;
	for (int i = 0; i < sizeof(a)/sizeof(int); ++i)
	{
		vs.push_back(a[i]);
	}
	vector<int> ret = twoSum(vs, 200);
	cout << ret[0] << ' ' << ret[1] << endl;
	return 0;
}



力扣刷题之旅:启程篇(一) 力扣的入门题目主要涉及基础的算法和数据结构知识,如遍历、排序、动态规划、链表操作等。通过解决这些题目,可以加深对算法和数据结构基本概念的理解,提高编程技巧和解决问题的能力。同时,这些题目也是进一步学习和挑战更复杂算法问题的基础。在解决这些题目时,重要的是理解题目背后的原理和逻辑,以及如何将问题分解为更小、更易于处理的部分。 阅读详情

相关推荐

LeetCode 两数之和C语言源码

//给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 //你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用 //示例: //给定 nums = [2, 7, 11, 15], target = 9 //因为 nums[0] + nums[1] = 2 + 7 = 9 //所以返回 [0, 1]

检测一个已经排序好的数组中任意两个元素的和是否存在等于某个值

检测一个已经排序好的数组中任意两个元素之和是否等于某个值 题目的要求是检测一个已经按照从小到大的方式排序的数组中,检测任意两个数的和是否存在某个值,多个也可,只有一个存在就成立。 例子 这有一个数组: var arr = [1,2,3,4,5,6,7,8,9] 现在需要检测该数组的任意两个元素中是否存在两个值相加等于5 如果存在直接返回true 否则返回false 自己想到的第一个方案: ...

角角兔的博客 956

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

两数和问题(在数组中找出两数和为给定整数的两元素)

题目:输入包含n个整数是数组A的整数x,求出满足A[i]+A[j]=x的i和j,如果没有这样的元素和,则返回-1和-1。 我的分析如下: 此题需要注意的是:数组中可能有重复元素,满足条件的解不止一组。 例如,给定数组A[1,3,2,2]和x=4,则满足条件的解为 (0,1):1+3=4 和(2,3):2+2=4。 解法一:暴力解法 遍历每个元素A[i],并查找是否存在一个值...

qq_42475914的博客 781

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南

pyrealsense2:Intel RealSense 深度相机的 Python 接口实战

weixin_43988131的博客 4350

从SGX到TDX:英特尔机密计算的技术演进与选型指南

本文深入解析了英特尔两代机密计算技术SGX与TDX的核心差异与选型策略。SGX提供应用级飞地隔离,安全等级高但开发复杂;TDX提供虚拟机级信任域保护,兼容性好且易于部署。文章结合金融与医疗行业实战案例,为开发者提供了清晰的选型指南,帮助根据代码可改性、安全需求、部署规模及生态成本选择最合适的机密计算方案。

java5的博客 420

有序数组中查找两个数的和为指定数

题目:输入一个升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n),如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 public class ArraySum { public static void main(String[] args)

Martin的博客 2393

利用VS2019编写安卓APP的步骤和所遇问题的解决办法

遇到了代码错误,这个可以将鼠标箭头置于错误代码处,这样VS2019给你解决办法,给的方法不能解决,并且读了程序都没有问题,那么你应该重启软件,这样还是不能解决,你尝试重新生成解决方案,还是不能解决有可能是运用的代码与当前版本不相符和、过时了,这个时候应当运用相应版本的代码。注:VS2019编写APP的空间不是很稳定,当你写的代码没有问题,但是出现了报错,可能是空间崩溃了,这个时候可以重启软件。点击“+”号,创建密钥存储,输入“别名”、“密码”、以及下面中的任意一项,直至红色框消失后。

youbestcando的博客 7812

【leetcode】排序数组中两个数字之和

两数之和、二分查找、双指针

weixin_44627672的博客 322

.ipynb文件深度解析:从JSON结构到Jupyter Notebook高效使用指南

在Python开发与数据处理领域,交互式编程正成为探索数据与验证思路的高效方式。Jupyter Notebook作为最流行的交互式环境之一,其默认文件格式.ipynb本质是一个基于JSON的文本文件,内部通过单元格组织代码、说明文字与运行结果。理解其JSON结构,不仅有助于掌握Notebook的存储原理,更能为文件损坏修复、版本控制与自动化转换提供基础。依托对单元格类型、魔法命令及输出可视化的熟练运用,数据分析和数据可视化流程可以变得更为流畅。同时,借助VS Code、nbconvert等工具,开发者能将.

weixin_28839629的博客 347

Meta开源Ego-Exo4D数据集:如何用1400小时多模态视频训练你的AI模型

Meta开源的Ego-Exo4D数据集包含1400小时多模态视频,涵盖第一人称和第三人称视角、眼动追踪、IMU传感器等多种模态,是AI模型训练的宝贵资源。本文详细介绍了从数据集下载、预处理到模型训练的全流程,帮助研究者高效利用这一多模态数据集进行AI模型开发。

weixin_29159441的博客 342

给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字

/* 2014-10-19 by 不吃青瓜 */ /* 原题大概意思: 给定一个数组a[10],数据范围 1-15 另外给定一个数字 x,范围 2-10 问是否能在数组 a 中找到两个数字的和等于 x */ #include bool findIt(int *arr , int n, int x) { int temp[16]; int i; for( i=0;

卖鱼的小白菜的专栏 1361

手把手教你学Simulink——无刷直流电机(BLDC)霍尔传感器(Hall Sensor)信号处理电路仿真

在中,转子位置靠​ 给出,换相逻辑(Commutation Table)据此决定。实际霍尔输出是,且常有:比较迟滞(内置或外加分压)RC 低通(防 EMI 尖刺)与 MCU 间想让你霍尔三相 UVW 理想方波(120° each, 换相每 60°elec)经观察:原始 HU/HV/HW、滤波后波形、整形后 TTL 电平验证换相表(001→100→010…)与转子转向匹配是破局关键。

amy_mhd的博客 38

力扣(leetcode 1)两数之和 python

@[TOC](力扣(leetcode 1)两数之和 python) 题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 ...

qq_41318002的博客 1128

天地图下载带审图号(审图号: GS(2024)0650号)的 “行政区划” 数据(含shp文件下载地址)

在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。如地理学报、地理科学等期刊的投稿指南中写到:非标准底图本刊不予发表!(如图1.1所示)如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用自然资源部标准地图服务系统标准地图底图(http://bzdt.ch.mnr.gov.cn/)(如图1.1所示)或国家测绘局地理信息局标准地图底图(如图1.2所示),所用底图边界要完全无修改(包括南海诸岛位置)。

JData_Engineer的博客 2302

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构与算法(数组)~ 介绍数组以及力扣上几道数组题目的方法和套路

(1)基本实现(组成):内部有数组的引用(开始是初始化指向为某个定长的数组),当需要动态改变数组长度时,其实是定义另外一个长度的定长数组,把原先数组的引用指向新创建的数组(然后把老数组的数据,进行遍历复制到新数组中)。自己动手实现:定义了一个动态数组(含有数组引用和数组长度):(2)数组主要的功能(增删改查):定义一些接口方法。

m0_66468899的博客 48

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

力扣初级算法-05-数组-移动零、两数之和

学习目标: 本次学习目标为 力扣初级算法-数组,其中主要的LC如下: 移动零 两数之和 学习内容: 移动零-----(链接) 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例1: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 解题思路: 解法一: 把非零元素往前移动 边界问题:考虑数组为null 和空的情况 代码逻辑过程: 循环遍历元素,当 代码实

nvluco的博客 152

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

腾讯,阿里,字节跳动等大厂面试题——力扣(167)两数之和 II - 输入有序数组

题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因

qq_41277824的博客 382

力扣算法题

力扣排名前200题目1 前50新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 分享下力扣出现概率前200题目 1 前50 1 两数之和 简单 2 两数相加 中等 5 最长回文子串 中等 3 无重复字符的

qq_19375579的博客 756

代码随想录算法训练营第六天| 242.有效的字母异位词 ,349. 两个数组的交集 ,202. 快乐数,1. 两数之和

遇到要查找元素的问题用哈希表解决,这道题元素少,可以用数组解决,用第i个元素剪去a对应的ASCII码就能把元素转化,之后++是因为当第二个数组元素查找后再减去,如果相同那么得到0不同就不是0。在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。

m0_73825258的博客 1505

LeetCode刷题启程—两数之和

小萌新第一次刷力扣,看到题想了好久它这个输入怎么办(刷PTA习惯了) hhh 题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0,.

m0_56369204的博客 142

代码随想录算法训练营打卡第六天|242.有效词的字母异位词,349.两个数组的交集,202.快乐数,1.两数之和

代码随想录算法训练营打卡第六天

m0_61517193的博客 285

代码随想录算法训练营第六天 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

【力扣】242.有效的字母异位词【力扣】349. 两个数组的交集【力扣】202. 快乐数【力扣】1. 两数之和

量变引起质变。 274

力扣刷题2020/3/13

一、两数之和 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { //由于不能重复利用,所以容易想到hash vector<int>res; if(nums.size() <= 0) ret...

weixin_42590177的博客 171

Leetcode 167. 两数之和 II - 输入有序数组和Leetcode 36. 有效的数独

如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length。将 flag 初始化为0,查找完每一行或每一列的值,如果存在重复的数,直接返回 false ,否则将 flag 重新初始化为0去查找下一行或下一列。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。因此 index1 = 1, index2 = 2。

2301_79614379的博客 894
上一篇: 一个简单的C程序
下一篇: 编程珠玑第8章-课后习题10题补充
ju136
博客等级 码龄19年 95粉丝 80原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值