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

Leetcode 334. 递增三重态子序列 (Increasing Triplet Subsequence)

问题理解

给定一个整数数组,判断是否存在三个下标 i < j < k,使得 nums[i] < nums[j] < nums[k]。不要求连续,只要求值严格递增且下标顺序满足。

思路

有两种主流解法:

  1. 基于 LIS(最长递增子序列)思想的优化方法
    • 使用一个动态维护的 dp_vec 数组,模拟 LIS 的构建过程。
    • 对每个元素,使用 lower_bound 找到第一个 ≥ 它的位置进行替换(保持递增结构但使尾部尽可能小)。
    • 一旦 dp_vec 长度达到 3,立即返回 true
    • 时间复杂度 O(n log n),空间 O(1)(因为最多存 3 个元素)。
  2. 更优的线性贪心法(O(n) 时间,O(1) 空间)
    • 维护两个变量 first 和 second,分别表示当前找到的最小值和次小值。
    • 遍历数组:
      • 若 num <= first,更新 first = num
      • 否则若 num <= second,更新 second = num
      • 否则(num > second),说明找到了 third,返回 true
    • 这种方法利用了“只要存在三元组,就一定能在遍历时触发 num > second”的性质。

注意:不要试图用固定大小数组模拟,直接用push_back扩容,否则会无法判断是否达到3个元素。如果用初始化,则会无法判断大小(如 dp_vec[0] 初始为 0,可能干扰比较负数情况),且没有正确维护递增关系。

trick

  • 提前终止:一旦 LIS 长度 ≥ 3 就返回,无需继续。
  • 贪心替代 LIS:本题只需判断是否存在长度为 3 的递增子序列,不需要完整 LIS,因此可用两个变量线性解决。
  • 初始化陷阱:错误代码中 vector<int> dp_vec(4) 默认初始化为 0,若输入全为负数(如 [-1, -2, -3]),比较会出错。正确做法应避免依赖默认值,或显式初始化为极大值(如 INT_MAX)。
  • 严格递增:注意题目要求 < 而非 <=,所以更新条件要用 <= 来覆盖相等情况(防止相等元素破坏严格递增)。所以用lower_bound来获取第一个大于等于当前元素的元素的iterator,用upper_bound是第一个大于当前元素的元素的iterator.

Code

// **基于 LIS 的解法**
class Solution {
public:bool increasingTriplet(vector<int>& nums) {vector<int> dp_vec;for(int i: nums){std::vector<int>::iterator it = lower_bound(dp_vec.begin(), dp_vec.end(), i); // 找到第一个 >= x 的位置(lower_bound)if(it == dp_vec.end()) dp_vec.push_back(i); // 可以延长 LISelse *it = i; // 替换,使末尾更小,利于后续扩展if (dp_vec.size() >= 3) {return true;             // 提前终止:已经找到长度为3的递增子序列}}return false;}
};
http://www.jsqmd.com/news/297932/

相关文章:

  • 抖音代运营公司服务选择,哪家比较好用
  • Llama3-8B实战案例:基于vllm+Open-WebUI搭建对话系统
  • 中国最大广告机器简史 学习Facebook,超越Meta|字节跳动 第3集
  • 快速排序详解
  • 用gpt-oss-20b-WEBUI搭建智能客服系统,成本直降90%
  • Unsloth自动驾驶场景:指令微调数据处理实战
  • 系统维护窗口:screen命令创建与管理一文说清
  • 深度测评专科生必备!10个AI论文平台对比与推荐
  • 【Django毕设源码分享】基于Django的网络课程在线学习平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 5个开源大模型镜像推荐:Qwen3-4B免配置一键部署实测
  • 预训练音色无法选择?CosyVoice2模型模式使用误区解析
  • 亲测阿里Live Avatar数字人效果,输入音频秒变生动虚拟形象
  • 多次修复技巧:fft npainting lama处理大面积缺失有妙招
  • 零基础入门PyTorch开发:一键启动通用镜像快速上手
  • 探讨服务不错的欧式起重机工厂,哪家更值得合作
  • 2026年面粉加工设备优质生产商Top10,双狮粮油机械名列前茅
  • FDA-MIMO雷达距离角度联合无模糊估计MATLAB仿真方案
  • 2026年香氛评测:这家除味香氛厂家凭实力出圈,香薰香薰机/精油香薰机/固体香氛/蜡烛香氛,香氛OEM供应商推荐榜单
  • SQL 注入
  • 如何提升用户体验?unet image WebUI界面优化实战建议
  • 2026权威专利代办指南:一站式服务网站优选清单,专利复审申请/专利改写升级/智能专利查重,专利代办系统哪家靠谱
  • 新手教程:如何避免 CSS vh 引发的滚动条问题
  • 基于Spring Boot的校园学生考勤系统设计与实现(毕业论文)
  • SGLang与普通LLM框架有何不同?对比实测
  • YOLOv9模型训练踩坑记录,这些错误别再犯
  • 新手必看!Qwen-Image-2512-ComfyUI保姆级部署教程
  • 用Glyph实现AI速读,处理百万字小说不再难
  • 一文说清AUTOSAR网络管理基本工作原理
  • Z-Image-Turbo为何要设MODELSCOPE_CACHE?缓存机制详解
  • unet image Face Fusion性能评测:不同分辨率输出速度对比