Leetcode300. 最长递增子序列
思路:动态规划
O ( N 2 ) O(N^2) O(N2),以右指针为端点的
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
vector<int> f(nums.size(), 1);
int maxn = 1;
for (int i = 0; i < nums.size(); i ++ ) {
for (int j = 0; j < i; j ++ ) {
if (nums[i] > nums[j])
{
f[i] = max(f[i], f[j] + 1);
maxn = max(maxn, f[i]);
}
}
}
return maxn;
}
};
Leetcode376. 摆动序列
思路:贪心
删去所有重复的元素,每一次挑选极值。
证明:假设,我们不挑选极值,一定会少选,但是这样选可能会选到重复的元素,所以我们先预处理删除所有重复元素
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
nums.erase(unique(nums.begin(), nums.end()), nums.end());
int n = nums.size();
if (n <= 2) return n;
int res = 2;
for (int i = 1; i + 1 < n; i ++ ) {
int a = nums[i - 1], b = nums[i], c = nums[i + 1];
if (b > a && b > c || b < a && b < c) res ++ ;
}
return res;
}
};