class Solution {
public:
int maximumCount(vector<int>& nums) {
int neg=ranges::lower_bound(nums,0)-nums.begin();
int pos=nums.end()-ranges::upper_bound(nums,0);
return max(neg,pos);
}
};
在数组 `nums = [-3, -2, -1, 0, 0, 1, 2]` 中,我们可以很容易地手动计算负数(negatives)和正数(positives)的数量。
- 负数(negatives):`-3`, `-2`, `-1`,所以 `neg = 3`。
- 正数(positives):`1`, `2`,所以 `pos = 2`。
因此,对于这个数组,负数的数量是3,正数的数量是2。
如果我们要使用类似前面提到的代码片段来计算这些值,我们可以再次回顾那个方法:
```cpp
int neg = ranges::lower_bound(nums, 0) - nums.begin();
int pos = nums.end() - ranges::upper_bound(nums, 0);
```
对于这个数组,`ranges::lower_bound(nums, 0)` 将会返回一个迭代器,指向第一个大于等于0的元素,也就是第一个0的位置。由于我们的数组是排序好的,我们知道第一个0正好位于数组的中间,也就是索引位置3(数组索引从0开始)。因此,`neg` 的值将是3,即迭代器位置减去开始位置。
对于 `ranges::upper_bound(nums, 0)`,它会返回一个迭代器,指向第一个大于0的元素,也就是1的位置。在这个例子中,1位于索引位置5,但是因为我们关心的是从0开始到第一个大于0的元素之间的距离,我们需要从数组的结尾减去这个位置。由于数组的结尾迭代器实际上指向数组最后一个元素的后一个位置,我们需要从7(数组的长度)中减去5,得到正数的个数为2。
综上所述:
- `neg = 3`
- `pos = 2`