LeetCode刷题记录——第575题(分糖果)

题目描述

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

示例 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]内。

思路分析

  • 由于是平均分配,所以妹子得到的糖果不同的数量肯定小于等于总糖果数量的二分之一
  • 用diffcandy记录糖果中不同数量糖果的个数
    – 如果不同的糖果个数大于等于总糖果数量的二分之一,那么最大不同数量只可能是二分之一
    – 如果不同的糖果个数小于总糖果数量的二分之一,那么最大不同数量就是不同糖果的个数。是不是有点没有表述清楚,看代码的话就很清楚了

代码示例

class Solution(object):
    def distributeCandies(self, candies):
        """
        :type candies: List[int]
        :rtype: int
        """
        nums = set(candies)
        diffcandy = len(nums)
        target_num = len(candies) // 2
        if target_num >= diffcandy:
            return diffcandy
        else:
            return target_num

你可能感兴趣的:(菜鸟的LeetCode刷题记录,python,leetcode)