news 2026/9/24 18:13:10

递增的三元子序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
递增的三元子序列

题目描述

给你一个整数数组n u m s numsnums,判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标( i , j , k ) (i, j, k)(i,j,k)且满足i < j < k i < j < ki<j<k,使得n u m s [ i ] < n u m s [ j ] < n u m s [ k ] nums[i] < nums[j] < nums[k]nums[i]<nums[j]<nums[k],返回t r u e truetrue。否则,返回f a l s e falsefalse

示例 1
输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意

示例 2
输入:nums = [5,4,3,2,1]
输出:false
解释:不存在满足题意的三元组

示例 3
输入:nums = [2,1,5,0,4,6]
输出:true
解释:其中一个满足题意的三元组是 (1, 4, 5),因为 nums[1] < nums[4] < nums[5]

算法原理

这道题属于贪心中的递增子序列问题,一般可以通过300. 最长递增子序列的方法来解决

最长递增子序列不同的是,这道题只需要找到长度为3 33的递增子序列就可以了,意味着l a s t E l e m e n t lastElementlastElement数组的大小如果是3 33,就可以直接返回t r u e truetrue,并且遇见n u m s [ i ] nums[i]nums[i]时,也可以不用二分优化,因为查找n u m s [ i ] nums[i]nums[i]的插入位置最多遍历两个元素,优化与不优化时间是差不多的

除此之外,实际上我们并不需要使用一个数组,直接用变量a , b a, ba,b分别存储长度为1 11的递增子序列的最后一个元素,长度为2 22的递增子序列的最后一个元素,初始化它们为n u m s [ 0 ] ,﹢ ∞ nums[0],﹢∞nums[0]﹢∞,之后遍历n u m s numsnums,遇到n u m s [ i ] nums[i]nums[i]时:

  1. n u m s [ i ] > b nums[i] > bnums[i]>b,说明能放在b bb之后,长度为3 33的递增子序列存在,返回t r u e truetrue
  2. a < n u m s [ i ] < = b a < nums[i] <= ba<nums[i]<=b,说明放在b bb之后的数,也能放在n u m s [ i ] nums[i]nums[i]之后,且n u m s [ i ] nums[i]nums[i]之后还能放更多的数,更新长度为2 22的递增子序列的最后一个数,b = n u m s [ i ] b = nums[i]b=nums[i]
  3. n u m s [ i ] < = a nums[i] <= anums[i]<=a,说明放在a aa之后的数,也能放在n u m s [ i ] nums[i]nums[i]之后,且n u m s [ i ] nums[i]nums[i]之后还能放更多的数,更新长度为1 11的递增子序列的最后一个数,a = n u m s [ i ] a = nums[i]a=nums[i]

代码

classSolution{public:boolincreasingTriplet(vector<int>&nums){inta=nums[0],b=INT_MAX;for(inti=1;i<nums.size();++i){if(nums[i]>b){returntrue;}elseif(nums[i]>a)// nums[i] ∈ (a, b]{b=nums[i];}elseif(nums[i]<=a){a=nums[i];}}returnfalse;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 18:11:49

基于UNet的脑肿瘤分割与生存预测:从2D到3D的完整实践指南

简介&#xff1a;面向医学影像分析与深度学习方向的高校学生、科研工作者&#xff0c;这份毕设资源系统实现了三种脑肿瘤分割算法&#xff0c;并包含生存预测模型和项目报告&#xff0c;主要解决从算法理论到代码落地、从结果评估到论文撰写的完整需求。资源共五十个文件&#…

作者头像 李华
网站建设 2026/9/24 18:11:05

Windows GDI AlphaBlend 像素级半透明绘制实战指南

简介&#xff1a;本资源是一份面向Windows桌面开发初学者与中级程序员的AlphaBlend半透明绘制实战源码包&#xff0c;聚焦图形界面中位图透明叠加这一典型视觉需求。资源完整实现基于GDI的32位带Alpha通道位图混合渲染&#xff0c;涵盖设备上下文配置、BLENDFUNCTION结构体设置…

作者头像 李华
网站建设 2026/9/24 18:11:01

Python交通流预测实战:855个传感器数据清洗与拥堵等级建模

简介&#xff1a;这份资源面向具备一定Python基础、希望入门智能交通与数据挖掘的学习者&#xff0c;围绕道路短时车流量与拥堵状态预测展开。项目基于GCM Corridor真实交通数据&#xff0c;覆盖16座城镇主干道、855个传感器每5分钟采集的拥堵记录&#xff0c;包含日期、方向、…

作者头像 李华
网站建设 2026/9/24 18:10:58

点云融合实战:从ICP配准到RGB多帧融合与避坑指南

简介&#xff1a;这份资源面向计算机视觉与三维重建方向的学习者&#xff0c;围绕RGB-D相机采集的不连续三帧图像&#xff0c;完整演示点云多帧融合流程。内容涵盖点云生成、坐标变换、点云配准与融合策略等关键环节&#xff0c;适合正在做课程作业或入门SLAM、三维重建的读者练…

作者头像 李华
网站建设 2026/9/24 18:10:58

JavaEE二手图书交易平台源码实战:分层架构与部署避坑指南

简介&#xff1a;这是一套面向高校计算机相关专业学生的JavaEE课程设计完整资源&#xff0c;以二手图书交易平台为选题&#xff0c;适合作为期末大作业、课程设计或毕业设计参考&#xff0c;新手也能快速上手。资源包共173个文件&#xff0c;约25.68MB&#xff0c;涵盖21个Java…

作者头像 李华
网站建设 2026/9/24 18:10:12

OpenClaw 成本自动测算实战:从公开市场价格抓取到项目成本方案自动生成

一、引言&#xff1a;项目成本测算为什么需要自动化在软件项目、工程采购和咨询服务等业务场景中&#xff0c;成本测算是立项决策、报价谈判和预算控制的第一步。传统的成本测算通常依赖人工收集材料价格、人工单价、服务费率等数据&#xff0c;再通过 Excel 表格手工汇总&…

作者头像 李华