Description

给你一个下标从 0 开始的整数数组 nums 和一个整数 pivot 。请你将 nums 重新排列,使得以下条件均成立:

  • 所有小于 pivot 的元素都出现在所有大于 pivot 的元素 之前 。
  • 所有等于 pivot 的元素都出现在小于和大于 pivot 的元素 中间 。
  • 小于 pivot 的元素之间和大于 pivot 的元素之间的 相对顺序 不发生改变。

请你返回重新排列 nums 数组后的结果数组。

Constraints

  • 1 <= nums.length <= 1e5
  • -1e6 <= nums[i] <= 1e6
  • pivot 等于 nums 中的一个元素。

Solution

解法没啥好说的,只是为了展示一下 std::basic_string<int> 小技巧。

果然水 QQ 群能学到新东西呢。

Code

class Solution {
public:
    vector<int> pivotArray(vector<int>& nums, int pivot) {
        auto lt = nums | views::filter([=](auto x) { return x < pivot; })
                       | ranges::to<basic_string>();
        auto eq = nums | views::filter([=](auto x) { return x == pivot; })
                       | ranges::to<basic_string>();
        auto gt = nums | views::filter([=](auto x) { return x > pivot; })
                       | ranges::to<basic_string>();
        return (lt + eq + gt) | ranges::to<vector>();
    }
};

LeetCode-2161 Partition Array According to Given Pivot