说实话,自己非常讨厌刷题,而且对算法这方面不太感兴趣,只怪本科的时候玩的太多了,没有好好学习,学不会数据结构和算法,才导致今天特别讨厌算法。但是。。。。。我还是注册了LeetCode,开始看看有没有简单容易的、适合自己的题做做。
今天看到了575这道题,大意如下:
一个整数数组,长度为偶数,里面的不同的数字代表了不同的糖果,而每一个数字代表了对应种类糖果中的一个。现在你要开始分糖果了,但是弟弟和妹妹得到的糖果数量必须是一样的(每人一半,这也解释了为什么数组长度是偶数。如果不是偶数,你吃一个,剩下的给弟弟妹妹们分了吧,哈哈),求妹妹能分到的糖果的种类的最大值。
下面是官方给出的两个例子以及解释:
因为平时Java用的比较多,所以我用Java解决了这个问题。
首先,我用一个HashSet进行去重,得到总的糖果种类数。
Set<Integer> set = new HashSet<Integer>();
for(int i=0; i<candies.length;i++)
{
set.add(candies[i]);
}
第二步,我获取糖果的总数量,并除以2(因为是两个人分,所以这里是获取每个人能分到的糖果数量)。
int n = candies.length/2;
第三步,也就是这道题的核心所在。比较糖果的种类数和每个人分到的糖果数之间的关系。
如果种类数比每个人能分到的糖果数小,肯定每个种类都重复了很多,把每个种类的糖果都给妹妹一份,然后还要继续把剩下的再分给妹妹几个才能达到n。
if(set.size() < n)
{
return set.size();
}
如果种类数比每个人能分到的糖果数都大,那毫无疑问,只要在set.size()种糖果中选出来n种给妹妹就行了,此时得到的种类数的值最大
else
{
return n;
}