LeetCode 334. Increasing Triplet Subsequence
2016-05-01 06:08
309 查看
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
return
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.
#include <vector> #include <iostream> #include <climits> using namespace std; // increasing triplet subsequence. /* Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array. return true if there exists i, j, k such that arr[i] < arr[j] < arr[k] given that 0 < i < j < k <= n-1 else return false. */ // requirment: O(n) time and O(1) space. // if we do the same way as longest increasing subsequence. // this method will take O(n) space and O(N2) time complexity. bool increasingTriplet(vector<int>& nums) { if(nums.size() < 3) return false; int n = nums.size(); vector<int> dp(n+1, 1); for(int i = 1; i <= n; ++i) { for(int j = 0; j < i; ++j) { if(nums[i] > nums[j]) { dp[i] = max(dp[i], dp[j] + 1); } } } for(int i = 0; i <= n; ++i) { if(dp[i] >= 3) return true; } return false; }
bool increasingTripletII(vector<int>& nums) { if(nums.size() < 3) return false; int min = INT_MAX; int mid = INT_MAX; for(auto n : nums) { if(n < min) { min = n; } else if(n > min) { if(mid < n) return true; mid = n; } } return false; } int main(void) { vector<int> nums{3, 4, 0, 2, 1, 5}; cout << increasingTripletII(nums) << endl; }
相关文章推荐
- 对自定义UITableViewCell的理解
- nRF51822 自定义UUID,ble_advdata_set的时候 NRF_ERROR_DATA_SIZE 错误的解决
- 2016 UESTC Training for Data Structures R - Japan 树状数组求逆序数
- 2016 UESTC Training for Data Structures Q - 昊昊爱运动 II 线段树+延迟操作+bitset
- 2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 树状数组+等差数列
- 2016 UESTC Training for Data Structures N - 秋实大哥搞算数 用栈处理表达式
- 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 树状数组+离线操作
- arduino 中断与Wire库函数(即I2C通讯)不起作用
- 2016 UESTC Training for Data Structures J - 郭大侠与Rabi-Ribi 优先队列
- 2016 UESTC Training for Data Structures I - 郭大侠与线上游戏 2个set
- 2016 UESTC Training for Data Structures E - 卿学姐与城堡的墙 树状数组求逆序对、离散化
- 2016 UESTC Training for Data Structures D - 卿学姐与魔法 优先队列、构造
- 2016 UESTC Training for Data Structures C - 卿学姐与诡异村庄 并查集
- 2016 UESTC Training for Data Structures A - 卿学姐与公主 线段树
- 浅谈提高团队成员的工作积极性
- UIView的frame和bounds区别
- 对UITableViewCell的分割线处理
- java中的中断控制 break和continue
- 设置UITableViewCell右侧的箭头
- 8.Binder详解