【c++】LeetCode167. 两数之和 II - 输入有序数组

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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

https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

说明:
返回的下标值(index1 和 index2)不是从零开始的。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

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


题解:指针对撞
暴力法太浪费了(特意给你个有序数组你特么还暴力???),不如这样。

  1. 因为是有序数组,先用最左边的(最小)和最右边的(最大)的元素相加,如果和等于目标数,就返回他们下标;
  2. 如果和小于目标数,那就吧左边的数改成第二个(第二小),这样得到的和更大,再相加看看结果;
  3. 如果和大于目标数,那就把右边的数改成右2(第2大),这样得到的和更小,再与左边相加判断结果;
  4. 以此类推直到得出目标结果或者遍历完整个数组。

设立两个指针 l , r ,一个从左边开始,初始值为0;一个从末尾开始,初始值为nums.size() - 1。
时间复杂度:O(n)
空间复杂度:O(1)

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int l = 0, r = numbers.size() - 1;
        while(l < r) {
            if(numbers[l] + numbers[r] == target)
                return {l + 1, r + 1}; //返回一个数组,里面的元素分别是是l+1, r+1
            else if(numbers[l] + numbers[r] < target)
                l++;
            else
                r--;
        }
        return {-1, -1}; //遍历完数组后没得到目标结果,抛出异常
        // invalid_argument在此题中不知道怎么用,干脆return {-1, -1} 好了
    }
};
leetcode】——从两个有序数组中寻找他们并集的第k小元素 题目题目:There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log(m + n)).两个排好序的数组A,B,大小分别为m,n,找到两个数组中所有元素 阅读详情

相关推荐

从两个有序数组的并集中寻找第k小元素

Given two sorted arrays A, B of size m and n respectively. Find the k-th smallest element in the union of A and B. You can assume that there are no duplicate elements. 一、朴素解法:O(m+n): 将两个数组

那些年....的专栏 3420

C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组

C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客 本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 题目 给定一个已按照*升序排列* 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于

渡过寒冬 2034

力扣第167两数之和 II- 输入有序数组 哈希表 c++ 新手推荐

注意,循环条件应为i < numbers.size(),而不是i <= numbers.size(),因为数组索引是从0开始的。在遍历数组numbers的过程中,对于每个元素numbers[i],我们通过哈希表查找是否存在另一个数target - numbers[i]。>对于空间复杂度来说,这段代码使用了一个哈希表来存储数组元素及其索引,所以空间复杂度为O(n),其中n是数组的长度。C++语言的代码,用于在给定的整数数组numbers中找到两个数,使其和等于给定的目标值target。重复使用相同的元素。

lenyan~的博客 369

【力扣(LeetCode)】【C/C++】【167.两数之和 II - 输入有序数组

力扣算法刷题

繁华倾夏的博客 320

leetcode167. 两数之和 II - 输入有序数组 C++

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

blog 283

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

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

weixin_43750513的博客 262

leetcode 两数相加c++_167. 两数之和 II - 输入有序数组

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

weixin_39904809的博客 184

[C++]Leetcode167. 两数之和 II - 输入有序数组 (详解)

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

cpb____的博客 973

leetcode 两数相加c++_LeetCode 167. 两数之和 II 输入有序数组 | Python

167. 两数之和 II - 输入有序数组题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted题目给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值index1和index2,其中index1必须小于index2。说...

weixin_39668898的博客 123

Leetcode167. 两数之和 II - 输入有序数组C++思路与代码)

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

azulgrana02的博客 218

LeetCode刷题_167:两数之和 II - 输入有序数组C++

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

anchuanxu的博客 193

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的博客 362

leetcode 双指针 C++167. 两数之和 II - 输入有序数组

167. 两数之和 II - 输入有序数组 class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { int ans1 = 0, ans2 = numbers.size() - 1; while(ans1 < ans2) { int sum = numbers[ans1] + numbers[ans2];

izhxxx的博客 240

力扣 167. 两数之和 II - 输入有序数组 C++

解题思路:第一眼看过去觉得比较简单双指针循环遍历就好,但是需要注意判断是否有重复元素,重复元素不再去寻找 代码: class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { vector<int> sum; for(int first=0;first<numbers.size()-1;first++){

qq_45057298的博客 271

Leetcode 167. 两数之和 II - 输入有序数组 解题思路及C++实现

解题思路: 因为数组本身是有序的,所以比较简单。定义两个指针,分别指向数组的头部和尾部。 偏大的话,就将尾部指针向前移一位; 偏小的话,就将头部指针向后移一位。 class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { //定...

PaniniGu的博客 296

c++两个数组对比去掉重复的元素_LeetCode 题解 | 167.两数之和 II 输入有序数组...

点击上方蓝字设为星标下面开始今天的学习~力扣167.两数之和 II - 输入有序数组(点击文末阅读原文查看题目)题目描述给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对...

weixin_31192609的博客 186

LeetCode--167. 两数之和 II - 输入有序数组C++描述)

// Source : https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/ // Date : 2021-09-26 题目描述:给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < a

YGQ_qq_1435471912 154

leetcode---C++实现---167. Two Sum II - Input array is sorted(两数之和 II - 输入有序数组

题目 level:easy Given an array of integers that is already sorted in ascending order, 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

u013482632的博客 186
上一篇: 【c++】LeetCode.215数组中的第K个最大元素
下一篇: 【c++】LeetCode125. 验证回文串
白金闪光蛋
博客等级 码龄7年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值