递增的三元子序列
#leetcode
#2024/07/28
#算法
目录
题目及理解
解题思路
- 两个变量:
第一最大值
和第二最大值
- 遍历,根据当前遍历的元素
- 更新第一最大值
- 更新第二最大值,他一定小于第一最大值
- 否则:小于第一最大值,也许与第二最大值
- 那么 当前值、第二最大值、第一最大值不就满足题设了吗?
代码实现
/**
* @param {number[]} nums
* @return {boolean}
*/
var increasingTriplet = function (nums) {
// base case
if (nums.length < 3) {
return false;
}
// 先定义两个最大值
// first 为第一个最大值
let first = Number.MAX_SAFE_INTEGER;
// second 为第二个最大值
let second = Number.MAX_SAFE_INTEGER;
// 遍历数组
for (let i = 0; i < nums.length; i++) {
// ① 当当前元素小于第一个最大值时,确保 first 是遍历到当前元素之前的最小值
if (nums[i] <= first) {
// 更新第一个最大值
first = nums[i];
//② 用于更新第二小值 second,确保 second 是遍历到当前元素之前的第二小值,并且大于 first。
} else if (nums[i] <= second) {
// 当当前元素小于第二个最大值时
// 更新第二个最大值
second = nums[i];
//③ 否则, 当 num 大于 second 时,说明找到了一个递增的三元组,返回 true
} else {
// 当当前元素大于第二个最大值时
// 返回 true
return true;
}
}
return false;
};
注意📢
如果手写不出来
Number.MAX_SAFE_INTEGER
可以参考下面写法
const first = Number.MAX_SAFE_INTEGER;
const first = Math.min() // 返回无穷大 Infinity
// 先定义两个最大值
let first = 2**31 -1;
let second = 2**31 -1;
const first = Number.MAX_SAFE_INTEGER;
const first = 2^31 -1 ;