You are given a 0-indexed integer array nums of size n and a positive integer k.
We call an index i in the range k <= i < n - kgood if the following conditions are satisfied:
The k elements that are just before the index i are in non-increasing order.
The k elements that are just after the index i are in non-decreasing order.
Return an array of all good indices sorted in increasing order.
Example 1:
Input: nums = [2,1,1,1,3,4,1], k = 2
Output: [2,3]
Explanation: There are two good indices in the array:
- Index 2. The subarray [2,1] is in non-increasing order, and the subarray [1,3] is in non-decreasing order.
- Index 3. The subarray [1,1] is in non-increasing order, and the subarray [3,4] is in non-decreasing order.
Note that the index 4 is not good because [4,1] is not non-decreasing.
Example 2:
Input: nums = [2,1,1,2], k = 2
Output: []
Explanation: There are no good indices in this array.
We define two arrays decr and incr, which represent the longest non-increasing and non-decreasing subarray lengths from left to right and from right to left, respectively.
We traverse the array, updating the decr and incr arrays.
Then we sequentially traverse the index i (where k≤i<n−k), if decr[i]≥k and incr[i]≥k, then i is a good index.
The time complexity is O(n), and the space complexity is O(n). Here, n is the length of the array.