【数组】167. 两数之和 II - 输入有序数组(简单)耗时长 待优化

LeetCode——167,两数之和 II - 输入有序数组 /** * \* Created: liuhuichao * \* Date: 2019/4/23 * \* Time: 6:21 PM * \* Description: 两数之和 II - 输入有序数组 * 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 * <p> * 函数应该返回这两个下标值 index1 和 index2,其中 in... 阅读详情

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

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        map<int,int> m;
        map<int,int> index;
        vector<int> rs;
        int cnt=0;
        for(auto x:numbers){
            m[x]++;
            index[x]=cnt++;
        }
        for(int i=numbers[0];i<=target;i++)
            if(m[i]&&m[target-i]){
                if(i==target-i){
                    int b=find(numbers.begin(),numbers.end(),i)-numbers.begin();
                    return {b+1,index[target-i]+1};    
                }
                return {index[i]+1,index[target-i]+1};
            }
        return {};
    }
};

【线性+二分查找】

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int l,r,m,len=numbers.size();
        for(int i=0;i<numbers.size();i++){
            int rest=target-numbers[i];
            l=i+1;
            r=len-1;
            while(l<=r){
                m=(l+r)/2;
                if(numbers[m]==rest){
                    return {i+1,m+1};
                }else if(numbers[m]>rest){
                    r=m-1;
                }else{
                    l=m+1;
                }
            }
        }
        return {};
    }
};
【中等】力扣算法题解析LeetCode167:两数之和 II-输入有序数组 题目要求在非递减排序数组中找到两数之和等于目标值,并返回其下标(从1开始)。利用双指针技巧,初始化左指针在数组头部,右指针在尾部,通过比较当前和与目标值的差异动态移动指针:若和小则右移左指针,和大则左移右指针。时间复杂度O(n),空间复杂度O(1)。示例:输入[2,7,11,15]和9,输出[1,2]。 阅读详情

相关推荐

STM32H7 FOC控制时序优化与PWM中点更新策略

在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,控制时序精度是决定电流环带宽、观测器收敛性与动态响应能力的基础要素。其核心在于理解PWM生成、ADC采样与控制计算三者之间的硬件级时间耦合关系——尤其在中心对齐模式下,标准更新机制引入的半周期延迟会破坏电压-电流瞬时映射,导致滑模观测器失配与高频相位滞后。通过将PWM更新事件绑定至重复计数器(RCR)清零点,可实现控制指令在开关周期中点生效,使等效电压矢量中心与计算时刻严格对齐。该策略显著提升系统确定性,为20 kHz以上高频电流环提供物理支撑,并广

flink9streamer的博客 859

Java实现 LeetCode 167 两数之和 II - 输入有序数组

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

南 墙 1万+

基于STM32的坐姿矫正与久坐提醒系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6主控,搭配MPU6050六轴姿态传感器、HC-SR04超声波测距模块,完整实现了坐姿矫正与久坐提醒系统的全流程开发,从多传感器数据采集、数字滤波、姿态解算、坐姿判断到多模式提醒,全流程无跳步保姆式拆解,配套逐行注释可直接编译的开源代码,新手跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 440

167. 两数之和 II - 输入有序数组(中等)

虽然类似,但增加了有序:寻找两个数时,固定第一个数,因此有序,因此第二个数可以直接使用二分查找算法,不用再逐一遍历。一个左指针(left)指向最小的元素,向右遍历;如果两个指针指向的元素之和大于目标值,那么将右指针左移动一位,使当前和变小一点;如果两个指针指向的元素之和小于目标值,那么将左指针右移动一位,使当前和变大一点;但需要注意的是,该题的索引是从1开始而不是0开始,因此索引值需要各加1。如果两个指针指向的元素之和等于目标值,那么它们就是我们想要的结果;

用魔法打败魔法,走楼梯啊! 867

创客学院嵌入式驱动开发——学习资料汇总

1.创客学院知识巩固-01C语言回顾_C/C++_Set_Mode的博客-优快云博客https://blog.csdn.net/Set_Mode/article/details/94431050 2.创客学院知识巩固-02数据结构_Set_Mode的博客-优快云博客https://blog.csdn.net/Set_Mode/article/details/94431087 3.创客学院知...

snaking616 5118

【高级-RAG-优化方法】

本文介绍了两种优化RAG(检索增强生成)系统的高级方法。第一部分介绍KnowFlow项目,它采用父子分块技术,将文档分为父分块(800-1500字符)和子分块(200-400字符),通过精确匹配子分块再返回父分块内容来保证搜索精确性和上下文完整性。第二部分探讨Milvus的多种增强技术,包括查询增强(如假设问题生成、回溯提示)、索引增强(自动合并块、分层索引)、检索器增强(句子窗口检索、元数据过滤)、生成器增强(提示压缩、块排序)以及管道增强(自我反省、代理查询路由)。这些方法共同提升了RAG系统的检索效率

weixin_48585108的博客 960

【LeetCode面试150】——167两数之和II输入有序数组

【LeetCode面试150】——167两数之和II输入有序数组题目讲解和代码实现

Junmo12345的博客 1275

SAP 实例解析分期付款配置及应用

SAP系统的付款条件支持分期付款功能,其奥妙之处就在于需要定义一个母条款和一个子条款,其中,母条款需要标识“分期付款”。 首先,定义分期付款的母条款OBB8:             然后,定义子条款(即分期付款的具体方式)OBB9:   由上图可以看出,分期付款的配置还是很强大的,针对每次付款,都可以进行第二层次付款条件的设置。   然后,我们做一笔发票,

heng0757的专栏 1万+

力扣解题-167. 两数之和 II - 输入有序数组

暴力双指针法(第一次解答):未利用有序特性,O(n²)时间复杂度导致超时,仅适合理解基础思路;首尾双指针法(第二次解答):最优解,O(n)时间+O(1)空间,完全贴合题目要求,是面试/工程首选;二分查找法(备选解):O(n×logn)时间+O(1)空间,效率略低但逻辑通用,适合拓展学习;关键技巧:有序数组的两数之和问题,优先使用首尾双指针法,利用“左小右大”特性精准调整和的大小;避免暴力遍历,充分利用题目给出的“有序”“唯一解”等关键条件;

qq_38261626的博客 922

畅游Diffusion数字人(20):FLAME代码解读与实现

​ 之前的博客《畅游Diffusion数字人(17):更强大的人脸和表情表达方法 FLAME:Learning a model of facial shape and expression》讲解了FLAME的原理,这篇博客主要讲解一下FLAME的代码实现。

沉迷单车的追风少年 1134

CREO图文教程:三维设计案例之矿泉水瓶实例图文教程之详细攻略

草绘,先绘制中心线,绘制底部宽度;对称标注:点击左端点,中心线,左端点,中键即可标注;给定高度;样条曲线绘制外形(双击样条曲线,点击下栏的控制模式(第一个按钮),再拉动控制样条曲线上的各个点)打勾即可得到三维实体。......

走向CTO之路 1936

❤️导图整理数组3: 两数之和II有序数组, 多个有序, 思路全变, 力扣167❤️

此专栏文章是对力扣上算法题目各种方法的总结和归纳,整理出最重要的思路和知识重点并以思维导图形式呈现,当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解),毕竟算法不是做了一遍就能完全记住的.所以本文适合已经知道解题思路和方法,想进一步加强理解和记忆的朋友,并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解,然后再看本文内容). 关于本专栏所有题目的目录链接,刷算法题目的顺序/注意点/技巧,以及思维导图源文件问题请点击此链接.导图...

孤柒的博客 2万+

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

【LeetCode刷题】167.两数之和 II - 输入有序数组

目录题目:167.两数之和 II - 输入有序数组示例:解题思路代码(Python)代码(Python)总结后续 题目:167.两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numb

qq_41810991的博客 357

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode 167. 两数之和 II - 输入有序数组(python解)

LeetCode 167. 两数之和 II - 输入有序数组(python解)题目示例自己的解1自己的解2答案总结参考 本文作为小白初学LeetCode笔记之用,如有不足之处欢迎指出 题目 在有序数组numbers中找出两个数,使其和为target(默认至少有一个解) 示例 输入:numbers = [2, 7, 11, 15] target = 9 输出:[1, 2] 自己的解1 class Solution: def twoSum(self, numbers: List[int], targ

WenDong1997的博客 679

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

167. 两数之和 II - 输入有序数组

#167. 两数之和 II - 输入有序数组 题目描述 解题思路 这道题跟第一题两数之和很像,不同的是增加了升序数组条件。所以采用二分查找的思想,前后两个指针,双向进行查找。 public static int[] twoSum2(int[] numbers, int target) { int p =0,q = numbers.length - 1; while(p < q)...

hh155715的博客 132

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

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

LeetCode 167. 两数之和 II - 输入有序数组:双指针解法详解

本文针对LeetCode 167题“两数之和II”进行解析,重点探讨如何利用有序数组特性实现最优解。题目要求在非递减数组中找出和等于目标值的两个数,返回其1-based下标。通过双指针法,从数组两端向中间逼近,根据当前和与目标值的比较调整指针位置,实现O(n)时间复杂度和O(1)空间复杂度的解法。文章详细拆解了双指针原理、代码实现及优化逻辑,并与哈希表、二分查找等其他解法进行对比,验证了双指针法在有序数组问题中的高效性和适用性。

2401_86788218的博客 876

Leetcode 126 两数之和 II - 输入有序数组 | 盛最多水的容器

核心优化是找到结果后立即返回,避免无效循环,这是提升执行效率的关键。减少重复的和计算、简化返回逻辑,让代码更简洁且性能更好。双指针法本身已是该问题的最优解法(时间 O (n)、空间 O (1)),优化后保持了最优复杂度,仅提升代码的执行效率和可读性。双指针法的核心是移动较矮的指针,因为盛水量由矮边决定,移动高边无法提升有效高度,只会减少宽度;该解法将时间复杂度从暴力法的 O (n²) 优化到 O (n),是本题的最优解;代码逻辑简洁,关键是理解 “宽度最大优先,逐步优化高度” 的思路。

im_AMBER的博客 727

167. 两数之和 II - 输入有序数组:JavaScript 双指针解法

题目链接LeetCode 167: https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/首先我们一起来看题...

LeviDing的博客 321

Leetcode—— 167. 两数之和 II - 输入有序数组

167. 两数之和 II - 输入有序数组 给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numb...

suxiaorui的博客 352

leetcode:167. 两数之和 II - 输入有序数组

题目来源 LEETCODE 题目描述 题目解析 暴力循环 public static int[] twoSum(int[] numbers, int target) { if (numbers == null || numbers.length < 2){ return new int[]{0, 0}; } ...

OceanStar的博客 325

LeetCode.167. 两数之和 II - 输入有序数组解法

LeetCode.167. 两数之和 II - 输入有序数组解法 *1.在已经排好序(升序),从数组最高位与最低位相加与目标值比较 相加和比目标值大,则高位下标(-1);否则地位下标(+1)。 * /** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){

lion_cute的博客 181

Day54 | 灵神 | 相向双指针:两数之和II-输入有序数组&&三数之和

而双指针做法中,我们利用单调性这个性质,只要这两个数加起来比target大,那我就知道数组中比两个数中较大的数大的那边全都不行,我们花费了O(1)的时间,却得到了O(n)的信息,所以我们可以从O(n²)优化到O(n)。一开始 2 + 9=11小于12,那么不管是2和4,6,8哪个数字加都不可能达到12了,说明左边的选小了(同时也说明2肯定不会是答案了,就把2排除了,在4,6,8,9中选答案)暴力做法中,我们是拿着两个数字加起来和target比一比大小,我们花费了O(1)的时间,得到了O(1)的信息。

m0_74795952的博客 933

leetcode 167. 两数之和 II - 输入有序数组

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

qq_33789406的博客 103

Leetcode刷题61-167. 两数之和 II - 输入有序数组(C++详细解法!!!)

题目来源:链接: [https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/] 167. 两数之和 II - 输入有序数组1.问题描述2.我的解决方案3.大神们的解决方案4.我的收获 1.问题描述 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 ind...

qq_40858438的博客 365
上一篇: 【数组】643. 子数组最大平均数 I(简单)
下一篇: 【数组】941. 有效的山脉数组(简单)
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值