首页 > 其他分享 >【双指针】LeetCode 167. 两数之和 II - 输入有序数组

【双指针】LeetCode 167. 两数之和 II - 输入有序数组

时间:2023-01-28 10:24:47浏览次数:68  
标签:index1 target int II 搜索 numbers index2 167 两数

题目链接

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

思路

本思路来自 一张图告诉你 O(n) 的双指针解法的本质原理(C++/Java)

下图是白色部分初始的搜索空间,即 A[0] + A[7]

image

假如 target < A[0] + A[7],此时 A[7]已经是搜索空间中最大的数了,所以应该让 A[0] 变为 A[1],搜索空间也变为下图所示。

image

通过上图可以看到,我们可以排除所有 A[0] + A[j] 的情况。

假如此时 target > A[1] + A[7],因为 A[1] 已经是搜索空间中的最小数了,所以应该让 A[7] 变为 A[6]。搜索空间变为下图所示。

image

这样一步步缩减搜索空间,便能得到最终答案。

image

代码

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int index1 = 0;
        int index2 = numbers.length - 1;

        while(index1 < index2){
            if(numbers[index1] + numbers[index2] == target){
                break;
            }
            if(numbers[index1] + numbers[index2] < target){
                index1++;
            }else{
                index2--;
            }
        }

        return new int[]{index1 + 1, index2 + 1};
    }
}

拓展

11.盛最多水的容器

240.搜索二维矩阵 II

标签:index1,target,int,II,搜索,numbers,index2,167,两数
From: https://www.cnblogs.com/shixuanliu/p/17069724.html

相关文章

  • 【双指针】LeetCode 680. 验证回文串 II
    题目链接680.验证回文串II思路题目允许删除一个字符,那么当我们判断到一对字符不相等时,可以分别判断区间\([left+1,right]\)和区间\([left,right-1]\)是否能......
  • 题解 CF1670F【Jee, You See?】
    problem给出常数\(n,z\),令\(F(m)\)表示所有满足以下条件的数列\(\{a_i\}\)的数量:\(\{a_i\}\)有\(n\)项,都是非负整数。它们的和不大于\(m\)。它们的异或和恰......
  • win11上IIS安装部署
    1、在win11上安装IIS(控制面版-->程序-->程序与功能-->启用或关闭windows功能),因2、部署站点后,网站提示:   管理员cmd执行下面命令C:\windows\system32\inetsrv\a......
  • 【算法训练营day27】LeetCode39. 组合总和 LeetCode40. 组合总和II LeetCode131. 分割
    LeetCode39.组合总和题目链接:39.组合总和独上高楼,望尽天涯题目不难,注意start_index参数的使用。classSolution{private:vector<vector<int>>result;ve......
  • 力扣---167. 两数之和 II - 输入有序数组
    给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1......
  • 力扣 264. 丑数 II [堆;多指针]
    264.丑数II给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例1:输入:n=10输出:12解释:[1,2,3,......
  • 【算法训练营day25】LeetCode216. 组合总和III LeetCode17. 电话号码的字母组合
    LeetCode216.组合总和III题目链接:216.组合总和III独上高楼,望尽天涯继续复健,一直在犯小的语法错误。慕然回首,灯火阑珊和昨天的题很像,主要区别在于递归返回条件和回溯......
  • UEFI EDKII 编程学习
    环境搭建部分第一步:下载EDK2​​https://sourceforge.net/projects/edk2/files/latest/download?source=files​​ 第二步:将下载的UDK2015.Complete.MyWorkSpace中的BaseTo......
  • 【栈】LeetCode 772. 基本计算器 III
    题目链接772.基本计算器III思路与【栈】LeetCode227.基本计算器II完全相同代码classSolution{publicintcalculate(Strings){//定义运算符......
  • 力扣---1306. 跳跃游戏 III
    这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i+arr[i]或者i-arr[i]。请你判断自己是否能够跳到对......