Re: [閒聊] 每日LeetCode已回收

看板Marginalman作者 (アユニ.D)時間2年前 (2022/12/29 01:16), 編輯推噓2(201)
留言3則, 2人參與, 2年前最新討論串159/719 (看更多)
※ 引述《Rushia (みけねこ的鼻屎)》之銘言: : 1962. Remove Stones to Minimize the Total : 給你一堆石頭,你每次可以從其中一堆移除floor(piles[i] / 2)個石頭,求出做了 : n次操作後,這堆石頭最少還剩下幾個石頭。 : Example: : Input: piles = [5,4,9], k = 2 : Output: 12 : Explanation: : 移除 piles[2],piles = [5,4,5] : 移除 pile[0]或piles[2],piles = [3,4,5] or [5,4,3] 思考: 每次都要拿最多石頭起來 -> Greedy 每次都要找到最多的那堆 -> 排序 詳細作法: 先把 piles 由大到小排序(say data),每次都在 data[0] 拿石頭並維持順序 而既然我們的 data 已經排好了,我們可以一個一個往後比,直到找到比處理完 的石頭堆還小的地方,塞進去就可以 Code: class Solution: def minStoneSum(self, piles: List[int], k: int) -> int: data = piles[:] data.sort(reverse=True) while k > 0: k -= 1 data[0] -= floor(data[0] / 2) for i in range(1, len(data)): if data[i - 1] < data[i]: data[i - 1], data[i] = data[i], data[i - 1] else: break return sum(data) 結果: 豪不意外的 TLE 了 (。・ω・。) 最佳化: 我不自己刻啦!JOJO from sortedcontainers import SortedList class Solution: def minStoneSum(self, piles: List[int], k: int) -> int: data = SortedList(piles, key=lambda x: -x) while k > 0: k -= 1 data.add(ceil(data.pop(0) / 2)) return sum(data) 搞定。 結語: Official solution 也是直接用 heapq 做 這樣的題目真的有 Medium 嗎 = =? -- 僕の妹がこんなに可愛いわけがない担当のアユニ‧D です https://i.imgur.com/Zvo15mG.jpg
https://twitter.com/AYUNiD_BiSH https://instagram.com/ayunid_official -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.102.230.129 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1672247774.A.7FE.html

12/29 01:39, 2年前 , 1F
大師
12/29 01:39, 1F

12/29 15:13, 2年前 , 2F
差不多吧 就medium偏easy等級的題目 排medium還算合理
12/29 15:13, 2F

12/29 15:13, 2年前 , 3F
畢竟那個range有夠廣
12/29 15:13, 3F
文章代碼(AID): #1Zh7dUV- (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1Zh7dUV- (Marginalman)