分糖果/distributeCandies.php
<?php
/*
给定一个偶数长度的数组，其中不同的数字代表着不同种类的糖果，每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 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]，妹妹有两种不同的糖果，弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/distribute-candies
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
$candies = [1, 1, 2, 2, 3, 3];
$candies = [1, 1, 1, 1, 2, 2, 2, 3, 3, 3];
print_r(distributeCandies($candies));

function distributeCandies($candies)
{
    /*
    最大极端情况，所有糖都不重样，那妹妹也只能得到一半。 中间情况，每个糖都有两个，那妹妹刚好能得到所有种类，数量跟第一种一样。 最小极端情况，就一种糖，那妹妹就只能得到一种。
    不管有多少种，先每种一个给妹妹，如果全部的糖没给晚。才给了妹妹几个，但所有的种类就都给过了，那后面的都是重复的了。如果给了妹妹一半的数量，还有不重样的，那妹妹最多也就只有一半数量的种类。所以说到最后，看（数量的一半）和（所有的种类）哪个先达到，也就是取两者中较小的值
     */
    // 数组去重(所有的种类)
    // 所有糖果的个数 平分 （数量的一半）
    return min(count(array_unique($candies)), count($candies) / 2);
}
