算法日常・每日刷题--<贪心>6

题目描述

给你一个整数数组 nums ,判断数组中是否存在长度为 3 的递增子序列

cpp 复制代码
i < j < k
nums[i] < nums[j] < nums[k]

如果存在,返回 true,否则返回 false

解题思路(核心精髓)

不用 DP、不用开数组、不用找子序列!

我们只维护两个最小值

  • one:遍历到目前为止最小的数
  • tow:遍历到目前为止比 one 大的最小数

遍历规则:

  1. 如果当前数 <= one → 更新最小 one
  2. 否则如果当前数 在 one 和 two 之间 → 更新 two
  3. 否则 比 two 还大 → 直接说明:找到了 one < two < cur存在三元递增序列,返回 true

为什么能这么做?

  • one 永远保证是全局最小
  • two 永远保证是次小、且在 one 之后
  • 一旦出现比 two 大的数,天然构成三元组

不需要记录下标!只要大小关系成立,一定满足 i<j

cpp 复制代码
class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        long long one;
        long long tow=1e18;
        one=nums[0];
        int n=nums.size();
        for(int i=1;i<n;i++)
        {
            if(nums[i]<=one)
            one=nums[i];

            else if(nums[i]>one&&nums[i]<=tow)
            tow=nums[i];
            
            else
            return true;
        }
        return false;
    }
};
相关推荐
weixin_446260851 小时前
CABAL:用于追踪同行评审中合谋投标影响的多智能体仿真框架
人工智能·算法·机器学习
青山木2 小时前
Hot 100 --- 跳跃游戏 II
java·数据结构·算法·leetcode·贪心算法
Tisfy2 小时前
LeetCode 3870.统计范围内的逗号:模拟 或 一步计算
数学·算法·leetcode·题解·模拟·遍历
明月_清风2 小时前
字符串匹配四大经典算法:BF、RK、BM、KMP 到底有什么区别?
后端·算法
明月_清风2 小时前
多模式字符串匹配:Trie 与 AC 自动机
后端·算法
木井巳2 小时前
【BFS/DFS 解决 FloodFill 算法】衣橱整理
java·算法·leetcode·深度优先·广度优先·宽度优先
热心网友俣先生3 小时前
2026年高教社杯数模国赛A题:五年命题规律与预测
算法·机器学习·数学建模
神明不懂浪漫3 小时前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
LuminousCPP3 小时前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法