当前位置:网站首页>167. 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组
2022-07-29 05:09:00 【卷饼85】
题目描述
给你一个下标从 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] 。
提示:
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案
题解
方法一:双指针
最优
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
//双指针 时间复杂度O(n)
int i=0,j=numbers.size()-1;
while(j>i)
{
if(numbers[i]+numbers[j]>target){
j--;}
else if(numbers[i]+numbers[j]==target){
return {
i+1,j+1};}
else i++;
}
return {
-1,-1};
方法二:二分查找
//二分查找
for (int i = 0; i < numbers.size(); ++i) {
int low = i + 1, high = numbers.size() - 1,k = target - numbers[i];
while (low <= high)
{
int mid = low + (high - low)/2 ;
if (numbers[mid] == k)
{
return {
i + 1, mid + 1};
}
else if (numbers[mid] > k)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
}
return {
-1, -1};
}
//这个很蠢,用上面那个
int i = 0,k=0;
int left=0 , right=numbers.size(),mid=0;
while(left<=right)
{
left=i+1;
k = target-numbers[i];
mid = left+(right-left)/2;
if(numbers[mid]>k){
right = mid-1;}
else if(numbers[mid]==k)return {
i+1,mid+1};
else if(numbers[mid]<k)
{
for(mid = mid+1;mid<right;mid++)
{
if(numbers[mid]>k)break;
else if(numbers[mid]==k)return {
i+1,mid+1};
}
++i;
}
}
return {
0,0};
}
};
边栏推荐
- Arfoundation starts from scratch 3- create an arfoundation project
- Unity3d - the object is too far away to see
- Adb常用命令列表
- Visual Basic .Net 如何获取命令参数
- Getting started with arfoundation tutorial 10- plane detection and placement
- 6.2 function-parameters
- CMake 设置vs启动运行环境路径
- ARFoundation从零开始3-创建ARFoundation项目
- Live broadcast preview | how to save 30% labor cost and shorten 80% trademark processing cycle?
- webgl1.0下texture2D和texture2DProj区别
猜你喜欢

6.2 function-parameters

Rimworld通过SteamCMD上传创意工坊的方法

2022年SPSSPRO认证杯数学建模B题第二阶段方案及赛后总结

京东云金秋上云特惠进行中!扫码参与活动

365天挑战LeetCode1000题——Day 036 二叉树剪枝 + 子数组和排序后的区间和 + 删除最短的子数组使剩余数组有序

【赛事预告】云上开发,高效智能——第二届阿里云ECS CloudBuild开发者大赛即将启动

510000 prize pool invites you to fight! The second Alibaba cloud ECS cloudbuild developer competition is coming

C语言求字符串的长度

CMU15-213 Malloc Lab实验记录

基于注解的三层项目的改造及添加包扫描的方式
随机推荐
C语言数组典型应用代码详细讲解—高手误入(逐步代码详解)
What is_ GLIBCXX_ VISIBILITY(default)
QT学习:使用JSON/XML等非ts文件实现多语言国际化
CSDN的md编辑器如何输入上下标?公式和非公式的输入方式不一样
321, Jingdong Yanxi × Nlpcc 2022 challenge starts!
MFC集成qt验证及问题处理
Qt版的贪食蛇游戏项目
C语言用指向指针的指针对n个整数排序
About realizing page Jump of website in Servlet
Arfoundation starts from zero 9-ar anchor
Arfoundation starts from scratch 3- create an arfoundation project
JS (foreach) return cannot end the function solution
Architecture analysis of three-tier project and parameter name injection of construction method
什么是_GLIBCXX_VISIBILITY(default)
基于注解的三层项目的改造及添加包扫描的方式
Teardown 解除时间限制的方法
Visual Basic .Net 如何获取命令参数
QML定制TabBar
C语言函数实现输出I love you
Unity3D - 物体太远看不见的问题