# 0575. 分糖果 ## 题目地址(575. 分糖果) <https://leetcode-cn.com/problems/distribute-candies/> ## 题目描述 ``` <pre class="calibre18">``` 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。 示例 1: 输入: candies = [1,1,2,2,3,3] 输出: 3 解析: 一共有三种种类的糖果,每一种都有两个。 最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。 示例 2 : 输入: candies = [1,1,2,3] 输出: 2 解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。 注意: 数组的长度为[2, 10,000],并且确定为偶数。 数组中数字的大小在范围[-100,000, 100,000]内。 ``` ``` ## 前置知识 - [数组](https://github.com/azl397985856/leetcode/blob/master/thinkings/basic-data-structure.md) ## 公司 - 阿里 - 字节 ## 思路 由于糖果是偶数,并且我们只需要做到两个人糖果数量一样即可。 考虑两种情况: ![](https://img.kancloud.cn/2b/8d/2b8d8bce7d330cb0f9ec3f573b648bf4_752x349.jpg) - 如果糖果种类大于n / 2(糖果种类数为n),妹妹最多可以获得的糖果种类应该是`n / 2`(因为妹妹只有n / 2个糖). - 糖果种类数小于n / 2, 妹妹能够得到的糖果种类可以是糖果的种类数(糖果种类本身就这么多). 因此我们发现,妹妹能够获得的糖果种类的制约因素其实是糖果种类数。 ## 关键点解析 - 这是一道逻辑题目,因此如果逻辑分析清楚了,代码是自然而然的 ## 代码 - 语言支持:JS, Python Javascript Code: ``` <pre class="calibre18">``` <span class="hljs-title">/* * @lc app=leetcode id=575 lang=javascript * * [575] Distribute Candies */</span> <span class="hljs-title">/** * @param {number[]} candies * @return {number} */</span> <span class="hljs-keyword">var</span> distributeCandies = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">candies</span>) </span>{ <span class="hljs-keyword">const</span> count = <span class="hljs-keyword">new</span> <span class="hljs-params">Set</span>(candies); <span class="hljs-keyword">return</span> <span class="hljs-params">Math</span>.min(count.size, candies.length >> <span class="hljs-params">1</span>); }; ``` ``` Python Code: ``` <pre class="calibre18">``` <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">distributeCandies</span><span class="hljs-params">(self, candies: List[int])</span> -> int:</span> <span class="hljs-keyword">return</span> min(len(set(candies)), len(candies) >> <span class="hljs-params">1</span>) ``` ``` **复杂度分析** - 时间复杂度:O(N)O(N)O(N) - 空间复杂度:O(N)O(N)O(N) 更多题解可以访问我的LeetCode题解仓库:<https://github.com/azl397985856/leetcode> 。 目前已经37K star啦。 关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。 ![](https://img.kancloud.cn/cf/0f/cf0fc0dd21e94b443dd8bca6cc15b34b_900x500.jpg)