說實話,自己非常討厭刷題,而且對算法這方面不太感興趣,只怪本科的時候玩的太多了,沒有好好學習,學不會數據結構和算法,才導致今天特別討厭算法。但是。。。。。我還是註冊了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;
}