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:
The solution of the question is same to Q300: Longest Increasing Subsequence.
Time complexity O(nlogn)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
bool increasingTriplet(vector<int>& nums) { | |
if(nums.empty()) | |
return 0; | |
set<int> set; | |
for(int i=0; i<nums.size(); i++){ | |
auto it = set.lower_bound(nums[i]); | |
if(it==set.end()){ | |
set.insert(nums[i]); | |
if(set.size()>=3) | |
return true; | |
}else{ | |
set.erase(it); | |
set.insert(nums[i]); | |
} | |
} | |
return false; | |
} | |
}; |
No comments:
Post a Comment