首页 > 其他分享 >两数之和Ⅱ——输入有序的数组

两数之和Ⅱ——输入有序的数组

时间:2024-08-10 21:56:44浏览次数:15  
标签:数组 示例 numbers 有序 index2 index1 两数 target

给你一个下标从 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] 。

看到这个题第一想法是两个循环,将数组加一遍,写下来后测试用例最后一个过不了,时间超了。

仔细看了一下题,看到是排了顺序的,第一想到是二分查找,觉得有点麻烦,就想到双指针,本质和二分差不多。

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) 
    {
        int i=0;
        int j=numbers.size()-1;
        while(i<j)
        {
            if(target<numbers[i]+numbers[j])
            {
                --j;
            }
            else if(target>numbers[i]+numbers[j])
            {
                ++i;
            }
            else
            {
                return {i+1,j+1};//数组下标从1开始
            }
        }
        return {-1,-1};
    }
};

标签:数组,示例,numbers,有序,index2,index1,两数,target
From: https://blog.csdn.net/2403_85903590/article/details/141096597

相关文章

  • 010.Vue3入门,数组变化侦听,实时在界面显示变化后的数据
    1、代码如下:<template><h3>数组变化侦听</h3><button@click="addListHandle">添加数据</button><ul><liv-for="(item,index)ofnames":key="index">{{item}}</li></ul>&l......
  • C语言指针变量详解(函数指针,函数指针数组,转移表)
    指针变量 1.字符指针变量在指针的类型中我们知道有⼀种指针类型为字符指针char*;⼀般使⽤:intmain(){charch='w';char*pc=&ch;*pc='w';return0;}还有⼀种使⽤⽅式如下:intmain(){const......
  • C语言指针与数组详解(指针数组,数组指针,⼆级指针)
    指针与数组1.数组名的理解1.1结论:数组名是数组⾸元素的地址,但是有2个例外。      •sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩     •&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数......
  • 指针数组、回调函数
    指针+二维字符型数组char s[][10]={"hello","world","china"};        char(*p)[10]=s;  //p指向二维数组s ----- *(*(p+i)+j) <=> s[i][j]        char[10] s[3];  //此时二维数组的元素是一个一维数组,定义了一个存放字......
  • 编写类 MyTools 类,编写一个方法可以打印二维数组的数据。 2) 编写一个方法 copyPerson
    1publicclassMethodExercise02{2publicstaticvoidmain(String[]args){34Personp=newPerson();5p.name="milan";6p.age=100;7//创建tools8MyToolstools=newMyTools();9......
  • 指针与一维数组
    目录指针:指针变量的初始化:赋值:指针作为函数参数://一维整型数组指针实现一维数组逆序:指针实现选择排序:指针实现冒泡排序:指针实现插入排序:指针实现一维整型数组二分查找(有序数组前提下):指针实现一维数组快速排序:指针:指针变量的初始化:如果指针没有初始化,此时是随机......
  • 指针进阶--指针与一维字符型数组
    目录const关键字:constinta =10;constint*p=&a;(等价于intconst*p=&a)const的应用:一维字符型数组与字符函数指针实现strcpy的功能:指针实现strncpy的功能:指针实现strcat功能:指针实现strncat功能:指针实现strcmp功能:指针实现strncmp功能:void*指针(万能指针):指......
  • Arrays数组做操作工具类
    packagecom.shujia.day12;importjava.util.Arrays;/*Arrays:是java提供专门针对数组做操作的工具类,该类没有构造方法,且方法都是静态的成员方法:publicstaticStringtoString(int[]a)将任意一个数组中的所有元素以字符串的形式拼接返回......
  • Python和AI库NumPy(三):数组形状与变换
    目录1.数组的基础形状操作1.1查看数组的形状1.2改变数组的形状2.数组的转置与轴交换2.1数组的转置2.2交换数组的轴3.数组的合并与分割3.1数组的水平与垂直合并3.2数组的分割4.高级数组变换技巧4.1广播机制(Broadcasting)4.2使用expand_dims()和squeeze()......
  • Java中数组算法的学习
    数组的算法目录数组的算法概述冒泡排序选择排序排序算法库StreamAPI概述简单排序:冒泡排序、选择排序、插入排序高级排序:快速排序、归并排序、希尔排序相关算法知识:划分、递归、二分查找冒泡排序原理:从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,......