1. 力扣 376. 摆动序列
题目解析
题目要求找到最长的摆动子序列。
算法原理
贪心策略:记录当前趋势变化,当趋势改变时计数加一。初始值设为 1。
代码
class Solution {
public int wiggleMaxLength(int[] nums) {
int left = 0;
int ret = 1;
for (int i = 0; i < nums.length - 1; i++) {
int right = nums[i + 1] - nums[i];
if (right == 0) {
continue;
}
if (left * right <= 0) {
ret++;
left = right;
}
}
return ret;
}
}
2. 力扣 300. 最长递增子序列
题目解析
求最长递增子序列的长度。
算法原理
结合贪心与二分查找优化动态规划解法。维护一个有序数组 tail,遍历输入数组更新 tail。
代码
class Solution {
public int lengthOfLIS(int[] nums) {
int tail ;
nums.length;
[] dp = [n];
dp[] = nums[];
( ; i < n; i++) {
(nums[i] > dp[tail - ]) {
dp[tail++] = nums[i];
;
}
;
tail - ;
(left < right) {
left + (right - left) / ;
(dp[mid] < nums[i]) {
left = mid + ;
} {
right = mid;
}
}
(nums[i] < dp[left]) {
dp[left] = nums[i];
}
}
tail;
}
}


