# 575.分糖果

给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。

输入: candies = [1,1,2,2,3,3]
输出: 3
解析: 一共有三种种类的糖果,每一种都有两个。
     最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。

输入: candies = [1,1,2,3]
输出: 2
解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
1
2
3
4
5
6
7
8

# 答案

  • 自己的答案
/**
 * @param {number[]} candyType
 * @return {number}
 */
var distributeCandies = function(candyType) {
    let map = new Map() 
    let count=0,len=candyType.length,num=0
    for(let candy of candyType) {
        if(map.has(candy)) {
            map.set(candy,map.get(candy) + 1)
        } else {
            map.set(candy,1)
        }
    }
    let typeValue = map.values()
    for(let value of typeValue) {
        if(count === len / 2) {
            break;
        }
        num++
        count++
    }
    return num
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  • 别人的
/**
 * @param {number[]} candies
 * @return {number}
 */
var distributeCandies = function(candies) {
    const cat = new Set(candies).size
    return Math.min(cat, candies.length / 2)
};
1
2
3
4
5
6
7
8