用C++做小猴有 n n 颗糖果,每颗糖果的重量依次为 w 1 , w 2 , … , w n w 1 ,w 2 ,…,w n 。小猴现在想要把这些糖果分成若干份分,要求每份糖果中不能有两颗糖果的重量相同。 请你帮助小猴计算,最少能分成多少份糖果。
时间: 2024-10-02 08:03:01 浏览: 38
zhihui.rar_N.W._ping参数
这个问题可以使用哈希集合(HashSet)和贪心策略来解决。C++中,我们可以用`std::unordered_set`来存储已知的不同重量的糖果,然后遍历所有糖果,对于每颗新糖果,检查它是否已经在集合中。如果不在,我们就将集合的大小加一,表示需要增加一份新的糖果组;如果在,说明我们找到了一对重量相同的糖果,但由于题目要求每份中不能有两颗重量相同的糖果,我们可以跳过这颗糖,继续找下一颗。最后返回集合的大小,即为最少需要分成的份数。
以下是C++代码示例:
```cpp
#include <vector>
#include <unordered_set>
int minSplits(std::vector<int>& weights) {
std::unordered_set<int> uniqueWeights;
int splits = 0;
for (int weight : weights) {
if (!uniqueWeights.insert(weight).second) { // 如果weight已经存在,说明有重复
continue; // 跳过这颗糖
}
++splits; // 否则,增加一份新的糖果组
}
return splits;
}
```
阅读全文