Skip to content

Latest commit

 

History

History
68 lines (57 loc) · 1.9 KB

File metadata and controls

68 lines (57 loc) · 1.9 KB

2420. 找到所有好下标

给你一个大小为 n 下标从 0 开始的整数数组 nums 和一个正整数 k

对于 k <= i < n - k 之间的一个下标 i ,如果它满足以下条件,我们就称它为一个 下标:

  • 下标 i 之前k 个元素是 非递增的
  • 下标 i 之后k 个元素是 非递减的

升序 返回所有好下标。

示例 1:

输入: nums = [2,1,1,1,3,4,1], k = 2
输出: [2,3]
解释: 数组中有两个好下标:
- 下标 2 。子数组 [2,1] 是非递增的,子数组 [1,3] 是非递减的。
- 下标 3 。子数组 [1,1] 是非递增的,子数组 [3,4] 是非递减的。
注意,下标 4 不是好下标,因为 [4,1] 不是非递减的。

示例 2:

输入: nums = [2,1,1,2], k = 2
输出: []
解释: 数组中没有好下标。

提示:

  • n == nums.length
  • 3 <= n <= 105
  • 1 <= nums[i] <= 106
  • 1 <= k <= n / 2

题解 (Rust)

1. 题解

impl Solution {
    pub fn good_indices(nums: Vec<i32>, k: i32) -> Vec<i32> {
        let k = k as usize;
        let n = nums.len();
        let mut prefix = vec![0; n];
        let mut suffix = vec![0; n];
        let mut count = (1, 1);

        for i in 1..n {
            prefix[i] = count.0;
            suffix[n - 1 - i] = count.1;

            if nums[i] <= nums[i - 1] {
                count.0 += 1;
            } else {
                count.0 = 1;
            }
            if nums[n - 1 - i] <= nums[n - i] {
                count.1 += 1;
            } else {
                count.1 = 1;
            }
        }

        (k..n - k)
            .filter(|&i| prefix[i].min(suffix[i]) >= k)
            .map(|i| i as i32)
            .collect()
    }
}