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
return
Given
[1, 2, 3, 4, 5]
,return
true
.
Given
return
[5, 4, 3, 2, 1]
,return
false
.Solution:
We maintains the most largest two numbers in the array.
For each number, we compare with these two largest numbers and update one of them if necessary.
If we find the number is larger than both of the two largest number, there is a triplet.
Code:
public class Solution { public boolean increasingTriplet(int[] nums) { int small = Integer.MAX_VALUE; int big = Integer.MAX_VALUE; for (int num : nums) { if (num <= small) { small = num; } else if (num <= big) { big = num; } else { return true; } } return false; } }