Leetcode-334-递增三元子序列
题目链接#
题目描述#
整数数组 nums ,是否存在长度为 3 的递增子序列。(可以不紧邻)
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,
使得 ,返回 true ;
否则,返回 false 。
要求#
时间复杂度:
思路#
-
只能想到O(nlogn)的排序做法....我就是菜狗...😭
-
正确做法是贪心:遍历一遍数组,first,second,third记录可能的三元组。first 和 second 要尽可能小, 这样才有更大的机会找到third.
-
先把当前访问的元素看作 third
(1) 如果 third 比 second 大,那就是找到了,直接返回true
(2) 如果 third 比 second 小,但是比first大,那就把 second 的值设为third,然后继续遍历找thrid
(3) 如果 third 比 first 还小,那就把first的值设为third,然后继续遍历找thrid
(这样的话first会跑到second的后边,但是不要紧,因为在second的前边,老first还是满足的)
注: INT_MAX
为int的最大值。
C++代码#
class Solution {
public:
bool increasingTriplet(vector<int>& nums) {
int n = nums.size();
int f, s, t;
f = nums[0], s = INT_MAX;
for (int i = 1; i < n; i++) {
if (nums[i] < f)
f = nums[i];
else if (nums[i]<s && nums[i]>f)
s = nums[i];
else if (nums[i] > s)
return true;
}
return false;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理