題目連結:
題目意譯:
在一個悶熱的夏日裡,有一個男孩想要買些冰棒。
在該店鋪中有 n 個冰棒。你被給定一個長度為 n 的陣列 costs,其中 costs[i] 為第 i 個冰棒的價格(以硬幣數量計數)。該男孩一開始有 coins 個硬幣可以花,而他想要買盡可能多的冰棒。
注:男孩可以按照任意順序來購買冰棒。
回傳該男孩用 coins 個硬幣可以購買的最大冰棒數。
你必須以計數排序(Counting Sort)來解出本題。
限制:
costs.length == n
1 ≦ n ≦ 10 ^ 5
1 ≦ costs[i] ≦ 10 ^ 5
1 ≦ coins ≦ 10 ^ 8
範例測資:
範例 1:
輸入: costs = [1,3,2,4,1], coins = 7
輸出: 4
解釋: 男孩可以買下索引值為 0 、 1 、 2 、 4 的冰棒,總價格為 1 + 3 + 2 + 1 = 7。
範例 2:
輸入: costs = [10,6,8,7,7,8], coins = 5
輸出: 0
解釋: 男孩付不起任何冰棒。
範例 3:
輸入: costs = [1,6,3,1,2,5], coins = 20
輸出: 6
解釋: 男孩可以把所有冰棒買下,總價格為 1 + 6 + 3 + 1 + 2 + 5 = 18。
解題思維:
就按照題目的要求使用計數排序即可,也就是直接開一個大小為 100001 的陣列來儲存所有可能價格的冰棒數量。
最後從數字小的開始(因為要買下盡可能多的冰棒)掃過每一種價格來買冰棒即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。