- 【题目】:给定一个整数序列,问你最少删去多少个数字后使得整个数序列严格单调(可以是单调增也可以是单调减)
- 【思想】:可以先去求最长连续递增或者递减子序列的长度,假设为l,然后len - l即为结果
- 时间复杂度O(N) 空间复杂度O(N)
import java.util.Scanner;
public class Main2 {
public static int helper(int[]nums){
int len = nums.length;
int[]dp = new int[len];//dp[i]表示从0位置开始遍历到第i位置上时的递增连续子序列的最大长度
int[]dp2 = new int[len];//dp[i]表示从0位置开始遍历到第i位置上时的递减连续子序列的最大长度
dp[0] = 1;
dp2[0] = 1;
int res1 = 0,res2 = 0;
for(int i=1;i<len;i++){
if(nums[i]>nums[i-1]){
dp[i] = dp[i-1]+1;
}else{
dp[i] = dp[i-1];
}
res1 = Math.max(res1,dp[i]);
}
for(int i=1;i<len;i++){
if(nums[i]<nums[i-1]){
dp2[i] = dp2[i-1]+1;
}else{
dp2[i] = dp2[i-1];