leetcode-master/problems/0575.分糖果.md

41 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 题目地址
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」「简历模板」「数据结构与算法」等等就可以获得我多年整理的学习资料。