目录
题目描述:
思路
很自然能够想到使用两个数值来记录最小值和次小值,并且有一个前提--次小值>最小值,那么我们在后面的遍历过程中只要找到一个值大于次小值,结果返回true,如果遍历整个数组都没有找到,结果返回false.
我们假设最小值small,次小值mid
但是我们对于最小值和次小值的更新策略是什么呢?比如:small >=nums[i],我们就能够直接更新small呢???
关键在这里---因为nums<=small,所以更新后得到的small肯定小于之前的small,比如:small=3,mid=5,后面的nums[i]为1,2,3.我们如果不更新的话会舍弃后面的1,2,3这样的满足条件的序列.但是如果后面的nums[i]为1,6,我们哪怕更新了small---1,5,6也依然是满足条件的序列(如果不更新也是3,5,6)
思路一想清楚,代码就是so easy了!
代码
class Solution {
public:
bool increasingTriplet(vector<int>& nums) {
int small = nums[0];
int mid = nums[0];
for (int i = 1; i < nums.size(); ++i) {
if (nums[i] < small) small = nums[i];
else if (nums[i] < mid) mid = nums[i];
else if (nums[i] > mid && mid > small) return true;
}
return false;
}
};