当前位置: 首页 > article >正文

【剪枝】个人练习-Leetcode-167. Two Sum II - Input Array Is Sorted

之前写标题都没加关键词,发现检索起来还是不太方便的。因此以后都加上相关算法的关键词方便检索。

题目链接:https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/submissions/

题目大意:给出一个非递减数组numbers[]和一个目标整数target,求两个下标index1, index2 (index1 < index2)使得刚好numbers[index1] + numbers[index2] == target,题目保证这个组合是唯一的。

思路:暴力做肯定会超时,那么想办法缩小index1index2的范围即可。不妨将两个数组元素称为num1, num2。因为数组是非递减的,所以num1 <= target/2并且num2 >= target/2

设数组长度为N,那么数组的最大元素和最小元素分别为num[N-1]num[0]。由题意一定会有num1 + num[N-1] >= targetnum2 + numbers[0] <= target,否则答案就不存在了。

由这以上四个条件缩小index1index2的范围,再进行遍历,遇到正确答案break即可。由于题意中数组下标从1开始,我们最后的两个结果加上1就好。

完整代码

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int N = numbers.size();

        int r1 = N-1;
        while (numbers[r1]*2 > target)
            r1--; 

        int l1 = 0;
        while (numbers[l1] + numbers[N-1] < target)
            l1++;
        
        int l2 = 0;
        while (numbers[l2]*2 < target)
            l2++;

        int r2 = N-1;
        while (numbers[r2] + numbers[0] > target)
            r2--;


        int pos1 = -1, pos2 = -1;
        for (int i = l1; i <= r1; i++) {
            for (int j = max(l2, i+1); j <= r2; j++) {
                if (numbers[i] + numbers[j] == target) {
                    pos1 = i, pos2 = j;
                    break;
                }
            }
            if (pos1 != -1 && pos2 != -1)
                break;
        }

        vector<int> ret = {pos1+1, pos2+1};
        return ret;
    }
};

http://www.kler.cn/a/7286.html

相关文章:

  • 计算机组成与原理(2) basic of computer architecture
  • Unity3D 完整直升机控制器(虚拟仿真级别)
  • Controller Baseband commands速览
  • 跨平台WPF框架Avalonia教程 十五
  • 【java】链表:判断链表是否成环
  • 高光谱深度学习调研
  • Rsync远程同步
  • 黑客在供应链攻击中破坏 3CX 桌面应用程序
  • 大数据与互联网的结合
  • 复旦微ZYNQ7020全国产替代方案设计
  • 10道关于垒球规则的判断题·你答对了多少
  • 形式语言总结
  • Vue中的slot插槽
  • 管理科学与工程案例分析:企业战略管理
  • 【 第六章 拦截器,注解配置springMVC,springMVC执行流程】
  • 高级威胁的攻击和防护A P T
  • Java基础——Set集合实现类
  • 50家公司Java,C++招聘要求
  • Redis学习
  • Office 2016安装包与教程
  • 敏捷工具.敏捷项目的可视化
  • STC的官网,是我永远忘不掉的炼丹炉
  • 反应持续时间:一种灵活、免费的心理科学工具
  • Git知识点及常用命令介绍—2023.04
  • MySQL基础-变量/流程控制/游标/触发器
  • 【深度学习】P1 神经网络、监督学习与深度学习、深度学习的驱动力量