Thinking Process
題目資料給的很大,顯然不是模擬的意思。所以應是利用貪心思想。
思路是先對所給三個數值按降序排序,得到a、b、c。然後判斷a與(b + c) * 2的關係:
若a >= (b + c) * 2,則拿兩個a分別給b或c,則限制因素為b+c。所以最後解為b+c(a剩餘多了)。如果是三種顏色都挑,則提高了題目的要求,也就是只需三個顏色不都相同就可以。
若a < (b+c) * 2,則限制因素為a。這時解為(a + b + c) / 3。解釋是:首先可以發現在滿足這個條件時,a是不夠的,也就是說在a兩個兩個取完之前,b和c一定至少有一個還有剩。那麼假設一個資料 3 3 2。模擬:1 2 2;0 0 2。也就是後面一定會剩下。那麼是否會出現最後是0 1 6這種情況呢?也就是b的個數又成為限制因素。
我反推了試試:0 1 6;2 2 6;4 3 6;6 4 6;8 5 6;10 6 6(5個桌子)。
而實際上對於這個資料正確解法應是10 6 6;8 5 6;6 5 5;4 4 5;2 4 4;0 3 4;0 3 2;0 1 1(7個桌子)。
所以,0 1 6這種情況的出現是因為在中間的選擇過程中就已經不滿足貪心。
也就是說最後剩下的兩個一定會是用到0 1、1 0、1 1三者之一,即剩下1個或2個。
所以整數除法(a + b + c) / 3 為正解。
Code
Time Complexity: , Space Complexity: