334. Increasing Triplet Subsequence
来源:互联网 发布:五星体育网络源 编辑:程序博客网 时间:2024/06/05 03:21
Approach # 1 Brute Force [ Time Limit Exceeded ]
Algorithm
For each num of array (index from 1 to n - 1 ), we check whether index i meets such conditions
1 If it exist a index j (index from 0 to i - 1 ) Satisfies nums[j] < nums[i] - do condition 2 ,else next index i+1 .
2 If it exist a index k (index from i+1 to n ) Satisfies nums[j] > nums[i] return true ,else next index i+1 .
In the end ,if i == n return fasle .
c++
class Solution {public: bool increasingTriplet(vector<int>& nums) { if( nums.size() < 3) { return false ; } for( int i = 1 ; i < nums.size() - 1 ; i ++ ) { bool find = false ; for( int j = 0 ; j < i ; j ++ ) { if( nums[j] < nums[i] ) { find = true ; break; } } if( !find ){ continue ; } for( int k = i + 1 ; k < nums.size() ; k ++ ) { if( nums[k] > nums[i] ) { return true ; } } } return false ; }};
Complexity Analysis
Time complexity :
O(N2) .Space complexity :
O(1) .
Approach #2 Dynamic Programming [Accepted]
Algorithm
We can treat this problem as Longest Increasing Subsequence ,if the length of LIC >= 3 return true .
c++
class Solution {public: int lengthOfLIS(vector<int>& nums) { vector<int> LIS; for (int i = 0; i < nums.size(); i++) { if (LIS.size() == 0 || LIS[LIS.size() - 1] < nums[i]) { LIS.push_back(nums[i]); } else { int l = 0, r = LIS.size() - 1; while (l < r) { int m = (l + r) / 2; if (LIS[m] >= nums[i]) { r = m; } else { l = m + 1; } } LIS[l] = nums[i]; } } return LIS.size(); } bool increasingTriplet(vector<int>& nums) { return lengthOfLIS(nums) >=3; }};
Complexity Analysis
Time complexity :
O(N∗logN) . Binary Search + Dynamic ProgrammingSpace complexity :
O(N) .
Approach #3 Scan and update [ Accepted ]
Algorithm
We scan the array from left to right and save the val used to record the first 2 elements of increasing size in an array.
c++
class Solution {public: bool increasingTriplet(vector<int>& nums) { if( nums.size() < 3 ) { return false ; } int a = nums[0] ; int b = INT_MAX ; for( int i = 0 ; i < nums.size() ; i ++ ) { if( nums[i] <= a ) { a = nums[i] ; } else { if( nums[i] <= b ) { b = nums[i] ; } else { return true ; } } } return false ; }};
Complexity Analysis
Time complexity :
O(N) .Space complexity :
O(1) .
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- 334. Increasing Triplet Subsequence
- Oracle 11G 数据库 DATA GUARD主从同步配置详解
- plsql左边显示表信息栏不见了
- snapgene(引物设计软件)下载 v1.1.3官方版 附教程
- UGUI学习笔记(五) ToggleGroup制作选择题单选框
- YOLO 图解
- 334. Increasing Triplet Subsequence
- 2017 年你应该尝试的 25 个 Android 库
- Android解决不同分辨率距离一致的问题
- TextView使用drawable属性
- Fountains CodeForces
- 抽象类与接口的区别
- 423. Reconstruct Original Digits from English
- 一个简单的SpringMVC框架web程序
- 4. Median of Two Sorted Arrays