The O(N) Increasing Triplet Subsequence Algorithm
- 时间:2020-09-24 11:41:27
- 分类:网络文摘
- 阅读:130 次
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.
Note: Your algorithm should run in O(n) time complexity and O(1) space complexity.Example 1:
Input: [1,2,3,4,5]
Output: true
Example 2:Input: [5,4,3,2,1]
Output: false
Checking Increasing Triplet Subsequence in O(N) Algorithm
The most intutive solution will be to bruteforce a triplet in O(N^3) and see if it is in increasing order. Obviously, this is inefficient. A Better solution is to record the smaller numbers as iterating the array.
This greedy approach works, as we are iterating the array from left to the right. If we find out a number that is different than the two numbers we have found – and both numbers are smaller than the current number, we know it has a increasing triplet subsequence.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Solution { public: bool increasingTriplet(vector<int>& nums) { int first = INT_MAX, second = INT_MAX; for (const auto &n: nums) { if (n <= first) { first = n; } else if (n <= second) { second = n; } else return true; } return false; // can't find such triplet increasing subsequence } }; |
class Solution {
public:
bool increasingTriplet(vector<int>& nums) {
int first = INT_MAX, second = INT_MAX;
for (const auto &n: nums) {
if (n <= first) {
first = n;
} else if (n <= second) {
second = n;
} else return true;
}
return false; // can't find such triplet increasing subsequence
}
};I have to say, this trick is elegant and makes the algorithm efficient in O(N) time and O(1) constant space.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:WordPress在线文件管理插件:FileBrowser 设置wordpress文章标题高亮的代码 免插件实现WordPress文章置顶的方法 让新浪微博变身外链图床的wordpress插件:微博图床 三款自动翻译文章标题为英文的wordpress插件介绍与比较 WodrPress实现远程图片本地化插件-Auto_Save_Image 碧沙岗公园作文 世界的奇迹作文700字 初有所成,静待花开 端午包粽子作文350字
- 评论列表
-
- 添加评论