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>();
}
};