给你一个大小为 n 下标从 0 开始的整数数组 nums 和一个正整数 k 。
对于 k <= i < n - k 之间的一个下标 i ,如果它满足以下条件,我们就称它为一个 好 下标:
下标 i 之前 的 k 个元素是 非递增的 。
下标 i 之后 的 k 个元素是 非递减的 。
按 升序 返回所有好下标。
思路:
dp1[i]表示以nums[i]为终点的最长非递增子数组长度
dp2[i]表示以nums[i]为起点的最长非递减子数组长度
遍历即可:
class Solution {
public List<Integer> goodIndices(int[] nums, int k) {
int n=nums.length;
int[]dp1=new int[n];
int[]dp2=new int[n];
dp1[0]=1;
dp2[n-1]=1;
for(int i=1;i<nums.length;i++){
if(nums[i]>nums[i-1])dp1[i]=1;
else dp1[i]=dp1[i-1]+1;
}
for(int i=nums.length-2;i>=0;i--){
if(nums[i]>nums[i+1])dp2[i]=1;
else dp2[i]=dp2[i+1]+1;
}
List<Integer>list=new ArrayList<>();
for(int i=k;i<n-k;i++){
if(dp1[i-1]>=k&&dp2[i+1]>=k){
list.add(i);
}
}
return list;
}
}