算法日常・每日刷题--<贪心>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;
    }
};
相关推荐
302wanger18 分钟前
DeepSeek-V4.1-Flash-1017 免费用到1024,速来
算法
lisw0536 分钟前
微分与积分的本质区别解析
算法·数学建模·极限编程
xys_6781 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code1 小时前
Java动态数组(一)
java·数据结构·windows
Interview Aid1122 小时前
Google SWE Intern VO 面经:两轮 Coding,Follow-up 考察 BFS 状态
算法
琳达爱分享2 小时前
从单机令牌桶到集群限流:一次配额超发的复盘
后端·算法
range2 小时前
带TTL的LRU缓存的实现-字节手撕-26/10/19
算法
糖果豆豆2 小时前
n log n 到底从哪来?排序下界、2-SAT 与 3-SAT、停机问题,卡的是同一件事
算法·架构
地平线开发者2 小时前
【玩转 征程6 算法工具链:PTQ 工具篇】hb_verifier
算法·自动驾驶
171320330计算机毕设编程2 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计