[Leetcode] 1. Two Sum 解题报告

JavaScript公式编辑器:低代码报表中的解析与交互实战 表达式解析是前端工程中一项基础而重要的能力,尤其在低代码报表和数据可视化场景里,公式编辑器直接决定了业务人员能否自主完成计算逻辑。其实现原理通常包括词法分析将公式拆分为Token流,再经递归下降解析构建AST,最终通过函数注册表安全求值。同时,输入层的高亮、补全与参数提示需要精细的交互设计,循环引用和浮点数精度则是必须跨越的工程陷阱。只有兼顾解析稳定与交互细节,公式编辑器才能真正成为低代码平台中可靠的基础设施。 阅读详情

题目:

 

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.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

 

UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.

思路:

1、暴力枚举法:两重循环搜索所有的情况,时间复杂度O(n^2),空间复杂度O(1)。肯定无法满足题目要求。

2、将数组排序(前提是允许修改原数组),然后用两个指针从左右分别扫描数组:

1)如果当前和大于target,则右指针左移一位;

2)如果当前和小于target,则左指针右移一位;

3)如果当前和等于target,则加入结果集中,并返回(由于题目中假设每对输入中有且仅有一对结果)。

这种方法中排序的时间复杂度是O(n*logn),扫描数组的时间复杂度是O(n),所以总体时间复杂度是O(n*logn),空间复杂度是O(1)。

3、定义一个hash表,并且依次扫描原数组中的数。如果hash表中存在(target - nums[i]),则分别两者的下标;否则将nums[i]放入hash表中。这种方法的时间复杂度可以降至O(n),但是空间复杂度为O(n),是一种典型的用空间换时间的做法。

 

注意target - nums[i]有可能越界,所以需要将remain的类型定义为long long(不过目前的测试用例似乎没有测试到这种edge case)。

 

代码:

C++:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        unordered_map<int, int> hashMap;
    	std::vector<int> indices;
    	for (size_t i = 0; i < nums.size(); i++)
    	{
    		long long remain = target - nums[i];        // avoid the overflow of int
    		if(remain < INT_MIN || remain > INT_MAX)
    		    continue;
    		if (hashMap.find(remain) != hashMap.end())
    		{
    			indices.push_back(hashMap[remain]);
    			indices.push_back(i);
    			return indices;
    		}
    		hashMap.insert(pair<int, int>(nums[i], i));
    	}
    	return indices;
    }
};

Python3:

class Solution:
    def twoSum(self, nums: 'List[int]', target: 'int') -> 'List[int]':
        if len(nums) <= 1:
            return False
        indices = {}
        for i in range(len(nums)):
            if nums[i] in indices:
                return [indices[nums[i]], i]    # return the results
            else:
                indices[target - nums[i]] = i   # add this to indices

Follow up:

1、如果算法可能无解,或者有多个解,则现有算法需要如何修改?

考虑到target具有不同的分解方式,例如3+5=8,并且2+6=8,所以在获得一个解时就不能提前返回了。此外,由于数组中还可能有重复元素,所以最好将hashMap的value类型修改为set<int>,而且必须首先对整个数组做一个遍历,建立起一个包含完整数据的hashMap,然后再对数组进行第二次扫描。在这个过程中,为进一步提高效率,可以考虑第一次扫描时,在hashMap中只存放小于等于target/2的值。然后在第二次扫描时,只有遇到大于target/2的值,才在hashMap中找对应项。当然最后别忘了处理一下target/2的特殊情况。

2、如果给定的数组特别大,则怎么办?如果有多台计算机可供使用,则如何优化算法?

如果数组特别大,则意味着无法将它们全部同时加入内存。假如有多台计算机,可以考虑将数组拆分,然后分别计算,最后合成结果。假如有n台计算机,我们可以将数组中小于等于target/2的所有数分成n份,然后分别计算。假如其中一份的范围是[left_min, left_max],则在该计算机上只考虑范围在[target - left_max, target - left_min]之内的数。最后将每台计算机上的计算结果合并起来即可。此时target/2的情况也需要特殊处理。至于如何拆分数据,则有两种思路可供考虑:1)在一台超级计算机上将数据将数据分成n份,然后分别发送到各台计算机;2)将数组数据复制n份,分别存到各台计算机上,然后每台计算机处理的时候,只处理处于自己处理范围之内的数据。这两种方式各有优劣。

基于YOLOv11的农作物病虫害检测系统设计与实现 我们使用公开的IP102病虫害数据集作为基础,该数据集包含102种病虫害类别,覆盖水稻、小麦、玉米等多种主要农作物。图像数量:75,222张类别数:102图像分辨率:从640×480到4000×3000不等标注格式:PASCAL VOC格式此外,我们还收集了部分田间实际拍摄的图像以增强模型泛化能力。 阅读详情

相关推荐

LSM6DSOW陀螺仪轮询驱动:从I2C/SPI配置到数据读取全解析

惯性测量单元(IMU)是现代嵌入式系统中实现姿态感知与运动跟踪的核心传感器,其通过加速度计和陀螺仪测量线性加速度与角速度。在嵌入式开发中,轮询(Polling)作为一种基础且可靠的通信方式,通过主循环主动查询传感器状态,简化了初始调试与验证流程。对于I2C/SPI接口的数字传感器,掌握寄存器配置、数据就绪标志检查及原始数据转换是通用的驱动方法,能够快速验证传感器工作状态并理解数据流。LSM6DSOW作为一款高性能6轴IMU,支持可配置的量程与输出数据速率,适用于无人机飞控、手持云台等高动态场景。本文以LSM

weixin_28728265的博客 555

两数之和问题

给定一个整数数组 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_75034448的博客 219

红外与可见光融合避坑指南:LLVIP数据集实测6大算法效果对比

本文基于专为弱光视觉设计的LLVIP数据集,对GTF、DenseFuse、FusionGAN、IFCNN等6种主流红外与可见光图像融合算法进行了深度实测与对比。通过客观指标与可视化分析,揭示了算法在极端弱光下易出现特征丢失的共性问题,并探讨了融合图像对下游目标检测任务的实际增益,为工程选型与算法调优提供了实用指南。

weixin_29092031的博客 439

【代码随想录】【LeetCode】学习笔记04-哈希表

遇到需要判断一个元素是否出现过的场景,应该第一时间想到哈希法!

qdsn的博客 794

逆向分析美团外卖mtgsig3.0签名算法:从抓包到算法还原实战

在移动应用开发与安全领域,API接口签名是保障数据传输完整性与身份验证的核心机制。其基本原理是通过特定的算法,将请求参数、时间戳等数据与密钥结合,生成唯一的签名串,服务器通过验证签名来识别请求的合法性。这项技术的核心价值在于防止数据篡改、重放攻击和未授权访问,是构建安全客户端-服务器通信的基石。在实际应用中,签名算法广泛应用于电商、社交、金融等各类App的接口保护场景。本文以美团外卖App的mtgsig3.0签名为具体案例,详细拆解了其生成逻辑。通过结合Frida动态调试与Jadx静态分析,文章深入探讨了如

weixin_29325515的博客 1236

电容式麦克风:从原理到实际电路波形解析

本文深入解析电容式麦克风的工作原理,从核心的振膜与背板结构、电荷锁定机制到场效应管放大器的作用。通过实物拆解与等效电路分析,阐明声音振动如何转换为电压信号,并指导如何用示波器实测波形,直观展现声电转换过程,适合电子爱好者和音频技术学习者。

Black的专栏 1079

哈希表-两数之和

class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> map; for (int i = 0; i < nums.size(); i++) { map.insert(pair<int, int>(nums[i], i)); ...

qq_52025040的博客 500

FANUC机器人S523 新款PN板卡与西门子PLC通信配置介绍

FANUC机器人S523 新款PN板卡与西门子PLC通信配置介绍

Robot_PLC_HMI_Automation 349

map的4种插入方式

map的key必须是可排序的,若是自己定义的需要重载小于号运算符 #include &lt;string&gt; #include &lt;iostream&gt;  #include &lt;map&gt;  #include &lt;utility&gt;  using namespacestd; int main() {     map&lt;int,string&gt;Em...

倾耳听的博客 2249

OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境

欢迎技术交流和帮助,提供IT相关服务,索要源码请联系博主QQ: 21497936,若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79641510 目录 OpenCV开发笔记(一):使用mingw530_32编译...

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 5万+

Python高阶爬虫:逆向工程模拟Wind/同花顺等金融终端数据抓取

本文详细阐述了模拟金融数据终端进行数据抓取的全套技术方案。我们从法律合规性讲起,选择了Playwright作为核心自动化工具,通过两个实战案例(同花顺网页版和Wind桌面版)演示了从分析、模拟到数据解析的完整流程,并进一步介绍了构建健壮爬虫系统所需的高级技巧。我们的策略是:启动一个由Playwright控制的浏览器,模拟真人登录,然后监听所有网络请求,从中过滤出我们需要的那个数据API。if key in ['f43', 'f169', 'f170', 'f46', 'f60']: # 价格类字段。

2201_76125261的博客 546

【代码随想录】哈希表——其他题目

202. 快乐数 //求和(另外定义一个函数求和)的过程中,如果sum重复出现(用哈希结构unordered_set快速判断一个元素是否重复) //表明陷入了无限循环,直接return false; //如果sum==1,直接返回true //如果既不是1也没有在哈希表中出现过,将其存进哈希表(set.insert(sum)) 具体细节见注释 class Solution { //求和的过程中,如果sum会重复出现(用哈希结构unordered_set快速判断一个元素是否重复) ..

m0_51660741的博客 351

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

XiaoqiangClub的博客 1万+

[leetcode] 1. Two Sum 解题报告

题目链接:https://leetcode.com/problems/two-sum/ Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two

小榕流光的专栏 629

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

老版QQ原生表情gif动态

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

LeetCode 1. Two Sum 解题报告

题意: 数组nums中,有两个元素的和是target,找出这两个元素的位置。 思路: 维护一个map,用数组的元素的值做key,用元素的位置做value。遍历nums,对每个num来说,如果map[target - num] 有值的话,就返回map[target - num]和num的位置,如果没有找到的话,就把num插入到map中,map[num] = index。时间复杂度O(n

皓月微风 2932

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leetcode解题报告1. Two Sum

leetcode解题报告1. Two Sum题目地址 难度是easy题目描述:给定一个整数数组和一个目标结果,找出数组里两个数,使得两个数的和是目标结果。每个数不能重复使用。保证有且只有一个解。我的思路:暴力求解,嵌套遍历数组两遍,即可。 其中有一些细节可以优化。我的代码:class Solution { public: vector<int> twoSum(vector<int>&

sysu_xiaoming的博客 534

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【LeetCode】1. Two Sum 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51439523Subject 出处:https://leetcode.com/problems/two-sum/ Given an array of integers, return indices of the two numbers such that they add

crazy_jack 8995

leetcode | 1. Two sum 解题报告

一、题目 题目链接:https://leetcode.com/problems/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

cosgns的专栏 343

LeetCode 1.Two Sum 解题报告

LeetCode 1. Two Sum 解题报告

骆小坑的填坑之旅 582

LeetCode解题报告 1. Two Sum[easy]

前言 之前听说过很多次LeetCode在面试中的大量应用,通过本次算法课可以开始题目的练习觉得还是很不错的。 题目描述1. Two Sum[easy] Given an array of integers, return indices of the two numbers such that they add up to a specific target.

conniemessi的博客 798

【LeetCode】1.Two Sum解题报告

【LeetCode】Two Sum解题报告tags: Array HashTable题目地址:https://leetcode.com/problems/two-sum/#/description 题目描述:   Given an array of integers, return indices of the two numbers such that they add up to a sp

郝春雨的博客 335

Leetcode (1) Two Sum 解题报告

Leetcode (1) Two Sum 在一个数组中找到两个数,使其和为目标值,返回下标。

晨星的博客 371

LeetCode OJ 第1题 Two Sum 解题报告

Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 mu

yjf_victor的专栏 3868

【LeetCode】1. Two Sum解题报告(Python)

题目分析: 这道题目是给定一个整数数组,判断是否可以使它的两个元素相加到特定目标并返回两个数字的索引。 代码说明: 开始想到了双重循环遍历,果然时间超限,这种情况可以建立一个字典用一次循环解决问题。循环取出nums里面的数字,使用target - nums[i]结果在keys里就证明成立了,不然就把nums[i]加入字典,注意是用数值作为下标,i作为字典里的数值。 测试代码: clas...

L141210113的专栏 1926

[leetcode]1.Two Sum 解题报告

题目: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 may not use the same...

henry_yang2018的博客 195

java two sum 讲解_Two Sum | leetcode 1 【Java解题报告】

Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the target, where i...

weixin_35012431的博客 192
上一篇: 面向对象设计原则
下一篇: [Leetcode] 2. Add Two Numbers 解题报告
魔豆Magicbean
博客等级 码龄19年 146粉丝 742原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值