给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 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]内。
C
int distributeCandies(int* candies, int candiesSize)
{
int n=candiesSize;
int count=0;
sort(candies,0,n-1);
for(int i=1;i<n;i++)
{
if(candies[i]==candies[i-1])
{
count++;
}
}
int m=n-count;
return m>=n/2?n/2:m;
}
void sort(int *a, int left, int right)
{
if(left >= right)
{
return ;
}
int i = left;
int j = right;
int key = a[i];
while(i < j)
{
while(i < j && key <= a[j])
{
j--;
}
a[i] = a[j];
while(i < j && key >= a[i])
{
i++;
}
a[j] = a[i];
}
a[i] = key;
sort(a, left, i - 1);
sort(a, i + 1, right);
}
C++
class Solution {
public:
int distributeCandies(vector<int>& candies)
{
int n=candies.size();
set<int> st;
for(int i=0;i<n;i++)
{
if(st.count(candies[i])<1)
{
st.insert(candies[i]);
}
}
int m=st.size();
if(m>=n/2)
{
return n/2;
}
else
{
return m;
}
}
};
python
class Solution:
def distributeCandies(self, candies):
"""
:type candies: List[int]
:rtype: int
"""
n=len(candies)
st=set()
for i in range(0,n):
if candies[i] not in st:
st.add(candies[i])
m=len(st)
if m>=n//2:
return n//2
else:
return m