优选算法——双指针6(单调性)

🔥近津薪荼:个人主页

🎬个人专栏:《c语言基础知识详解》《c++基础知识详解》

❄️莫问几时见天明

✨休管他人论长短


本期知识点导图

1.上期参考代码:

cpp 复制代码
class Solution {
public:
    int xxjshitiancai(vector<int>& nums) {
        sort(nums.begin(), nums.end());//先排序~
        int sum = 0, n = nums.size();
        
        for (int i = n - 1; i >= 2; i--) {
            int left = 0, right = i - 1;//每一次遍历双指针的初始位置
            while (left < right) {
                if (nums[left] + nums[right] > nums[i]) {
                    sum += right - left;
                    right--;
                } else {
                    left++;
                }
            }
        }
        return sum;
    }
};

放一只乌萨奇在这,有什么不懂的尽管问他~

2.题目解析

LCR 179. 查找总价格为目标值的两个商品(点击跳转)

重点:

升序

要找一个二元组,他俩之和满足目标值

返回任一结果即可

3.思路讲解

3.1暴力解法:

穷举出所有组合,直到找到符合要求的组合。

循环嵌套,时间复杂度O(N^2),会超时(比较简单,就不再赘述啦,有问题的同学可以看前几期的暴力解法~)

3.2优解:

思路:

  • 看到有序数组,又是找指定二元组,不难想到双指针和单调性

不难想到的,对吧

  • 就题给示例:

因为升序,left之后的值都比left大,但是最小值left与此right相加都大于目标值,那么在此left,right区间里,剩下的值与此right相加必然大于目标值**(单调性)**,那么left向右遍历没有意义,因此我们让right--

在新的区间内再次进行如上逻辑判断,直至找到和为目标值的二元组。

今天的题非常之简单,相信有不少新手同学第一次做都能自己把它做出来。

劝敲:

4.预告

下一篇要讲解的题为
三数之和(点击跳转)

思路与本题有千丝万缕的关系,

大家可以顺着这题的思路来做一做。

明天见~

相关推荐
xier_ran10 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
Nil20811 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing12 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
li星野12 小时前
5 TYPES OF ADVERBS — One-Page Notes
学习
星恒随风12 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考12 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
loulanyue_12 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院13 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
jimy113 小时前
C++ 虚函数表:基类和派生类共用一张 vtable 吗?
开发语言·c++
爱吃提升13 小时前
Dev-C++ 5.11 C++断点调试完整教程
开发语言·c++