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

看板Marginalman作者 (caster)時間1年前 (2024/06/14 09:41), 1年前編輯推噓4(400)
留言4則, 4人參與, 1年前最新討論串356/1548 (看更多)
※ 引述《DJYOSHITAKA (franchouchouISBEST)》之銘言: : 好久沒有在平日早上寫了 : 剩我是公司的狗了 : 945. Minimum Increment to Make Array Unique : 思路: : 先排列 : 如果遇到某一區間是nums[j]-nums[i]會小於j-i : 就代表這個區間必須透過數個move去撐開成[nums[i], nums[i]+1, nums[i]+2, ...] : 若nums[j]-nums[i] >= j-i : 代表可以reset 重新開始一個新的區間 : def minIncrementForUnique(self, nums: List[int]) -> int: : nums.sort() : start_i, target_diff, ans = 0, 1, 0 : for i in range(1,len(nums)): : if (nums[i]-nums[start_i]) < (i-start_i): : ans += (nums[start_i]+target_diff-nums[i]) : target_diff += 1 : else: : target_diff = 1 : start_i = i 思路: 直觀上 假設nums = [1,2,2] 最少移動一定是[1,2,3] 元素之間只差1 所以先排序 假設nums[i] <= nums[i-1] 我們就把nums[i-1]變成nums[i]+1 這樣就是最少移動的情況 其實就維持一個公差為1等差數列 Python Code: class Solution: def minIncrementForUnique(self, nums: List[int]) -> int: nums.sort() result = 0 for i in range(1, len(nums)): if nums[i] <= nums[i - 1]: result += nums[i - 1] - nums[i] + 1 nums[i] = nums[i - 1] + 1 return result -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.211.189 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1718329303.A.006.html

06/14 09:42, 1年前 , 1F
大師
06/14 09:42, 1F

06/14 09:46, 1年前 , 2F
大師
06/14 09:46, 2F
※ 編輯: sustainer123 (223.140.211.189 臺灣), 06/14/2024 09:47:21

06/14 09:49, 1年前 , 3F
大師
06/14 09:49, 3F

06/14 10:07, 1年前 , 4F
你好猛
06/14 10:07, 4F
文章代碼(AID): #1cQv_N06 (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1cQv_N06 (Marginalman)