Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array.
Formally the function should:
Return true if there exists i, j, k
such that arr[i] < arr[j] < arr[k] given 0 ≤ i < j < k ≤ n-1 else return false.
Your algorithm should run in O(n) time complexity and O(1) space complexity.
Examples:
Given [1, 2, 3, 4, 5]
,
return true
.
Given [5, 4, 3, 2, 1]
,
return false
.
min,当前最小的数。若当前存在两个数是递增的,max保持此序列中的第二个数,若出现a[i]大于max就返回true!
class Solution {
public:
bool increasingTriplet(vector<int>& a) {
const int n=a.size();
if(n<3) return false;
int min=INT_MAX,max=INT_MAX;
for(int i=0;i<n;i++)
{
if(a[i]<=min)
min=a[i];
else if(a[i]<=max)
max=a[i];
else return true;
}
return false;
}
};