575. Distribute Candies-分糖果問題

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章