1. 程式人生 > 實用技巧 >575. Distribute Candies - Easy

575. Distribute Candies - Easy

You havencandies, theithcandy is of typecandies[i].

You want to distribute the candies equally between a sister and a brother so that each of them getsn / 2candies (nis even). The sister loves to collect different types of candies, so you want to give her themaximum number of different typesof candies.

Returnthe maximum number of different typesof candies you can give to the sister.

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.

Example 3:

Input: candies = [1,1]
Output: 1

Example 4:

Input: candies = [1,11]
Output: 1

Example 5:

Input: candies = [2,2]
Output: 1

Constraints:

  • n == candies.length
  • 2 <= n <= 10^4
  • nis even.
  • -10^5 <= candies[i] <= 10^5

hint:
To maximize the number of kinds of candies,
we should try to distribute candies such that sister will gain all kinds.
Inserting all candies kind in the hashset and then checking its size with upper limit.

time = O(n), space = O(n)

class Solution {
    public int distributeCandies(int[] candies) {
        int n = candies.length;
        Set<Integer> set = new HashSet<>();
        for(int candy : candies) {
            set.add(candy);
        }
        return set.size() < n / 2 ? set.size() : n / 2;
    }
}