LeetCode題解(0330):按要求補齊陣列(Python)

長行發表於2021-01-04

題目:原題連結(困難)

標籤:貪心演算法

解法時間複雜度空間複雜度執行用時
Ans 1 (Python) O ( M + l o g N ) O(M+logN) O(M+logN) O ( 1 ) O(1) O(1)64ms (98.65%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def minPatches(self, nums: List[int], n: int) -> int:
        # 處理陣列為空的情況
        if not nums:
            ans = 0
            total = 0
            while total < n:
                total += (total + 1)
                ans += 1
            return ans

        # 處理陣列不為空的情況
        else:
            ans = 0

            # 處理第1個數之前的情況
            total = 0
            while total < nums[0] - 1:
                total += (total + 1)
                ans += 1

            total += nums[0]
            # 處理陣列中間的數
            for i in range(1, len(nums)):
                if nums[i] > n:
                    break
                while total < nums[i] - 1:
                    total += (total + 1)
                    ans += 1
                total += nums[i]

            # 處理最後1個數之後的情況
            while total < n:
                total += (total + 1)
                ans += 1

            return ans

相關文章