通过range和view来解实际应用题

我们先来看题:

有 n 座山排成一列,每座山都有一个高度。给你一个整数数组 height ,其中 height[i] 表示第 i 座山的高度,再给你一个整数 threshold 。

对于下标不为 0 的一座山,如果它左侧相邻的山的高度 严格大于 threshold ,那么我们称它是 稳定的。我们定义下标为 0 的山 不是 稳定的。

请你返回一个数组,包含所有 稳定 山的下标,你可以以 任意 顺序返回下标数组。

通过range和view来解实际应用题_第1张图片

经过对题意的分析,可以分析出三个关键要点。

(1) 首先要处理的数据范围不包含 0,是 [1, n)。

(2) 然后针对每个位置的判断是否符合题意对稳定的要求。

(3) 最后将满足判断的下标合并到一个数组中作为答案。

现在通过 range 和 view 可以分别针对这三个要点轻松处理。

#include 
​
class Solution {
public:
    std::vector stableMountains(vector& height, int threshold) {
               // 1. 处理范围 [1, n)
        return views::iota(1, ssize(height))
               // 2. 判断左侧相邻山的高度严格大于 threshold
               | views::filter([&](int i) { return height[i - 1] > threshold; }) 
               // 3. 合并为 vector 返回答案
               | ranges::to>();
    }
};

最后注意,这里的 ranges::to<> 是 C++23 中引入的函数。没错,力扣已经开始支持 C++23 标准了! 

今天的文章分享就到这里了,希望对大家的学习和工作有所帮助

你可能感兴趣的:(数据结构)