41 lines
2.0 KiB
Markdown
41 lines
2.0 KiB
Markdown
## 题目地址
|
||
https://leetcode-cn.com/problems/distribute-candies/
|
||
|
||
## 思路
|
||
|
||
糖果的种类是可妹妹先来,所以思路先求出一共有多少种类型的糖果,需要注意: 数组中数字的大小也就是糖果的种类取值范围在[负十万和 正十万之间], 依然可以定义一个数组,通过哈希法求出有多少类型的糖果,那么糖果种类可以是负数 怎么办呢,可以把 定一个 20万大小的数组 ,就可以把糖果的全部类型映射到数组的下表了。
|
||
|
||
通过哈希法,可以求出了糖果的类型数量,如果糖果种类大于糖果总数的一半了,返回 糖果数量的一半就好,因为妹妹已经得到种类最多的糖果了,否则,就是返回 糖果的种类。
|
||
|
||
## 代码
|
||
|
||
```
|
||
class Solution {
|
||
public:
|
||
int distributeCandies(vector<int>& candies) {
|
||
// 初始化一个record数组,因为糖果种类的数值在范围[-100,000, 100,000]内
|
||
// 将这个范围的数值统一加上100000,可以映射到record数组的索引下表了
|
||
// record数组大小必须大于等于200001,这样才能取到200000这个下表索引
|
||
int record[200001] = {0};
|
||
// 通过record来记录糖果的种类
|
||
for (int i = 0; i < candies.size(); i++) {
|
||
record[candies[i] + 100000]++;
|
||
}
|
||
// 统计糖果种类的数量
|
||
int count = 0;
|
||
for (int i = 0; i < 200001; i++) {
|
||
if (record[i] != 0) {
|
||
count ++;
|
||
}
|
||
}
|
||
int half = candies.size() / 2;
|
||
// 如果糖果种类大于糖果总数的一半了,return 糖果数量的一半
|
||
// 否则,就是return 糖果的种类。
|
||
return count > half ? half : count;
|
||
}
|
||
};
|
||
```
|
||
|
||
> 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
|
||
|