6190. 找到所有好下标

给你一个大小为 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;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.