1. 程式人生 > >575. Distribute Candies(python+cpp)

575. Distribute Candies(python+cpp)

題目:

Given an integer array with even length, where different numbers in this array represent different kinds of candies. Each number means one candy of the corresponding kind. You need to distribute these candies equally in number to brother and sister. Return the maximum number of kinds of candies the sister could gain. Example 1:

Input: candies =[1,1,2,2,3,3] 
Output: 3 
Explanation: There are three different kinds of candies (1, 2 and 3), and two 
candies for each kind. Optimal distribution: The sister has candies [1,2,3] and
 the brother has candies [1,2,3], too.  The sister has three different kinds of candies.  

Example 2:

Input: candies = [1,1,2,3] 
Output: 2 
Explanation: For example, the sister has candies [2,3] and the brother has 
candies [1,1].  The sister has two different kinds of candies, the brother has
 only one kind of candies.  Note:

The length of the given array is in range [2, 10,000], and will be even. The number in given array is in range [-100,000, 100,000].

解釋: 求姐姐可以獲得的最多的種類數,因為是均分,所以姐姐最多隻能獲得一半的糖果,如果種類數比獲得的糖果數多,則答案是獲得的糖果數,否則是種類數,即姐姐可以獲得的最多的種類數,是總的種類數和糖果總數的一半中較小的一個,種類數可以通過求set()的長度得到。

python程式碼:

class Solution(object):
    def distributeCandies(self, candies):
        """
        :type candies: List[int]
        :rtype: int
        """
        return min(len(candies)/2,len(set(candies)))

c++程式碼:

#include <set>
class Solution {
public:
    int distributeCandies(vector<int>& candies) {
        set<int> _set;
        for (auto c:candies)
            _set.insert(c);
        return min((candies.size()/2),_set.size());   
    }
};

總結: c++中,min()函式和max()函式在<algorithm>中,set是用insert()。