给你一个下标从 1 开始的整数数组 numbers
,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target
的两个数。如果设这两个数分别是 numbers[index1]
和 numbers[index2]
,则 1 <= index1 < index2 <= numbers.length
。
以长度为 2 的整数数组 [index1, index2]
的形式返回这两个整数的下标 index1
和 index2
。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。
示例 1:
输入:numbers = [2,7,11,15], target = 9 输出:[1,2] 解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
示例 2:
输入:numbers = [2,3,4], target = 6 输出:[1,3] 解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。
示例 3:
输入:numbers = [-1,0], target = -1 输出:[1,2] 解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
c++解法
- class Solution {
- public:
- vector<int> twoSum(vector<int>& numbers, int target) {
- int n = numbers.size();
- vector<int> res;
- int left = 0,right = n-1;
- while(left
- if(numbers[left]+numbers[right]>target)right--;
- if(numbers[left]+numbers[right]
- if(numbers[left]+numbers[right]==target){
- res.push_back(left+1);
- res.push_back(right+1);
- return res;
- }
- }
-
- return res;
-
- }
- };
分析:
本题要返回两数之和等于目标数的两个数,因为原数组已经按照非递减的顺序排列,可以利用双指针来找到两个数,当左指针和右指针两个数大于目标数则右指针向左移,反之则左指针向右移直到找到符合的两个数返回,时间复杂度为O(n)
总结:
本题考察双指针的应用,利用两边之和是否大于目标数来进行查找,满足题目要求的常数级额外空间的要求
-
相关阅读:
ps怎么对字体进行加粗?
RK3399系统移植 | 基于 ubuntu core 20.04 构建根文件系统
启动 Tomcat 日志乱码问题
【Rust日报】2022-11-28 使用 Rust 编写解释型语言
ocr的场景应用--发票识别
【日志系统最全】Spring Cloud Sleuth使用ELK收集&;分析日志
mongodb备份还原指南
机器学习——聚类算法
电化学传感器使用-电子学角度分析
vscode+makefile开发STM32(二)---下载
-
原文地址:https://blog.csdn.net/si_mple_/article/details/133716411