《LeetCode之每日一题》:249.两数之和 II - 输入有序数组

两数之和 II - 输入有序数组 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。 示例 1: 输入:numbers = [2,7,11,15], ta 阅读详情

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


题目链接: 两数之和 II - 输入有序数组

有关题目

给定一个已按照 非递减顺序排列  的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。
numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
示例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
示例 2:

输入:numbers = [2,3,4], target = 6
输出:[1,3]
示例 3:

输入:numbers = [-1,0], target = -1
输出:[1,2]
提示:

2 <= numbers.length <= 3 * 10^4
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案

题解

法一:暴力遍历(超时)

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int> ans;
        for (int i = 0; i < numbers.size() - 1; i++)
        {
            for (int j = i + 1; j < numbers.size(); j++)
            {
                if (numbers[i] + numbers[j] == target)
                {
                    ans.push_back(i + 1);
                    ans.push_back(j + 1);
                    break;
                }
            }
        }

        return ans;
    }
};

时间复杂度:O(n ^ 2)
空间复杂度:O(1)

法二:哈希表

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int n = numbers.size();
        unordered_map<int, int> mp;//键为对应元素的值,值为对应下标
        for (int i = 0; i < n; i++)
        {
            mp[numbers[i]] = i;
        }

        vector<int> ans;
        for (int i = 0; i < n; i++)
        {
            int x = numbers[i];
            if (mp.count(target - x))
            {
                ans.push_back(i + 1);
                ans.push_back(mp[target - x] + 1);//按照题干要求的下标返回方式
                break;
            }
        }

        return ans;
    }
};

时间复杂度:O(n)
空间复杂度:O(n)

法三:二分查找

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int n = numbers.size();
        vector<int> ans;
        for (int i = 0; i < n; i++)
        {
            int l = i + 1, r = n;
            while(l < r)//[l, r)所以r 从 n开始
            {
                int mid = l + (r - l) / 2;
                if (numbers[mid] == target - numbers[i])
                {
                    ans.push_back(i + 1);
                    ans.push_back(mid + 1);
                    return ans;
                }
                else if (numbers[mid] > target - numbers[i])
                {
                   r = mid;
                }
                else 
                {
                    l = mid + 1;
                }
            }
        }
        return {-1, -1};
    }
};

在这里插入图片描述

法四:双指针

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int l = 0, r = numbers.size() - 1;
        while(l <= r)
        {
            int sum = numbers[l] + numbers[r];
            if (sum == target)
            {
                return {l + 1, r + 1};
            }
            else if (sum < target)
            {
                l++;
            }
            else
            {
                r--;
            }
        }
        
        return {-1, -1};
    }
};

2

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

相关推荐

openstack卷分离异常问题处理

对于 2023-05-10 之后的所有 OpenStack 版本,需要将Nova 配置为向 Cinder 发送服务令牌,然后 Cinder 接收该令牌。cinder.conf处添加service_token_role配置。1.修改nova的config文件添加如下配置。确定service role 是否存在。有关详细信息,请参阅。重启nova cinder 服务。nova-compute日志。cinder-api日志。

weixin_43391291的博客 477

leetcode-167两数之和(双指针+二分)

原题链接 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例 1: 输入:numbers = [2,7,11,15], targ

m0_46656833的博客 258

WorldPop数据集

WorldPop数据集介绍

qq_43874102的博客 1万+

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置(C++)

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。设计并实现时间复杂度为 O(log n) 的算法解决此问题。该题使用了两个二分查找函数分别来找到左右边界从而得到开始位置和结束位置。

Panbk的博客 383

【深圳】IBM V3500存储维修 更换控制器故障

今天给大家分享的是深圳.福田区一个电商客户公司一台IBM Storwize v3500存储控制器故障从远程诊断 收集日志 分析结果的实际案例,如图所示通过存储管理口登陆进去后直接看到少了一个控制器,经过工程师分析日志后判定为该控制器损坏,接下来更换控制器配件,标准套件的控制器不带子卡和电池,所以需要把故障控制器上的子卡和电池拆下来装到新控制器上,这个电池拆还需要点技巧,接着把新的控制器插回V3500主机,等待大约十分钟后,新控制器指示灯全绿,管理界面看到节点已联机;冠峰科技-爱科技爱分享。

OuYangYuXi的博客 4579

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

给定一个按非递减顺序排序的整数数组 nums,返回每个数字的 平方组成的新数组,要求也按非 递减顺序排序。

给定一个按非递减顺序排序的整数数组 nums,返回每个数字的 平方组成的新数组,要求也按非 递减顺序排序。

猪儿君的博客 552

微生物组β-多样性——PCoA分析及可视化

让你的数据映入眼帘

qq_47369980的博客 1万+

2、两数之和II-输入有序数组

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

凌云俯瞰 437

从零到一:TI AWR1843 Boost EVM与DCA1000 EVM的ADC数据采集实战指南

本文详细介绍了TI AWR1843 Boost EVM与DCA1000 EVM的ADC数据采集实战指南,涵盖硬件连接、软件配置、固件烧录、雷达参数设置及数据处理等关键步骤。通过MATLAB等工具,开发者可高效实现毫米波雷达数据采集,适用于自动驾驶、工业检测等领域。

weixin_29001327的博客 967

Isograph Reliability Workbench 14实战:从零构建故障树分析模型

本文以“马达不转”为例,手把手教你使用Isograph Reliability Workbench 14从零构建故障树分析模型。内容涵盖创建工程、定义顶事件、添加逻辑门与基础事件等核心步骤,并介绍了模型检查与定性定量分析,帮助你系统掌握这一强大的可靠性工程工具。

weixin_29309213的博客 365

LeetCode--hot100题单顺序

Frank---7的博客 2344

3D打印机控制系统设计:基于MATLAB的3D打印机运动学建模、轨迹规划和控制

控制实现:在控制实现中,需要将轨迹规划的结果转化为实际的控制指令,控制3D打印机按照规划的轨迹进行运动。3D打印机的运动学建模:3D打印机的运动学建模是指将3D打印机的机械结构、传动系统和运动控制部件等抽象成数学模型,以便于进行控制系统的设计和分析。轨迹规划:轨迹规划是指根据3D模型的几何形状和打印机的运动学模型,计算出打印机需要执行的运动轨迹,以便于实现所需的打印效果。控制实现:控制实现是指将轨迹规划的结果转化为控制指令,控制3D打印机按照规划的轨迹进行运动。

走向CTO的路上... 2473

LeetCode 每日一题 2023/9/4-2023/9/10

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 354

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

LeetCode题解:两数之和 II - 输入有序数组

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

余光的博客 972

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面试经典150题——两数之和 II - 输入有序数组

假设我们的两个指针一个指向数组的头命名为head,一个指向数组的尾命名为end,又因为数组是非递减的,是不是就相当于我的。,而我是有小了就变大和大了就变小的原则,因此只能在17和22这个范围不断收缩,这样就能不断贴近目标直到找到目标。暴力求解的思路就是通过两次for循环,外层循环遍历整个数组,内层循环遍历剩下的部分,也可以将其理解为双指针。通过小了就变大,大了就变小的原则,不断向target靠近,直到找到target。而换个解释就是说:我们的head和end相加的值,因为和target进行了比较,

m0_60388871的博客 1508

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

167. 两数之和 II - 输入有序数组 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。 示例 1: 输入:num

lhn的博客 345

【每日力扣】——两数之和 II - 输入有序数组(双指针的运用)

如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length。想到了运用双指针的知识,左右指针分别初始化为0和len(numbers)-1,一头一尾检索对应的两数和是否等于目标,因为数组是有序数组,所以可以通过得到的和与目标进行大小比较来决定左右指针的移动,如果小于目标,则左指针需要右移,反之右指针左移。输入:numbers = [2,7,11,15], target = 9。

2301_76563460的博客 128

leetcode:两数之和Ⅱ 输入有序数组(双指针法+二分查找法详解)

内容:题目,代码实现及注解,思路详解

weixin_73142957的博客 573

力扣167-两数之和-C++双指针法

一、题目 给你一个下标从 1 开始的整数数组numbers ,该数组已按 非递减顺序排列,请你从数组中找出满足相加之和等于目标数target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯...

TLJava^v^的博客 985

两数之和 II - 输入有序数组 - LeetCode

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

小老弟的博客 134
上一篇: 《LeetCode之每日一题》:248.适龄的朋友
下一篇: 《LeetCode之每日一题》:250.统计特殊四元组
Mascottttttt
博客等级 码龄6年 628粉丝 367原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值