↓快轉到主要內容
  1. LeetCode/

LeetCode 1646: Get Maximum in Generated Array

·1 分鐘· ·
LeetCode Easy Array Simulation
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-11-01

  • 提交紀錄:Runtime Error → Wrong Answer → Accepted → Runtime Error → Wrong Answer → Accepted

解題思路
#

直接模擬(Array 模板五):nums[0] = 0、nums[1] = 1,i 是偶數時 nums[i] = nums[i // 2],奇數時 nums[i] = nums[i // 2] + nums[i // 2 + 1]。n = 0 時陣列只有 [0],不能先放 nums[1]。

我的嘗試
#

  • 2022-11-01:第一版 n = 0 時陣列只有一格,res[1] = 1 超出範圍;補上特例後,奇數位置寫成 res[i // 2] + res[i % 2],i % 2 永遠是 1:n = 9 答案 4,回傳 3。
  • 2022-11-15 重寫:先寫成 j = i - 1 // 2,// 比 - 先算,等於 j = i,直接超出範圍;修好之後又漏了 n = 0,[0, 1] 的最大值是 1,答案 0。

正確解法
#

class Solution:
    def getMaximumGenerated(self, n: int) -> int:
        if n == 0:
            return 0
        nums = [0] * (n + 1)
        nums[1] = 1
        for i in range(2, n + 1):
            nums[i] = nums[i // 2] if i % 2 == 0 else nums[i // 2] + nums[i // 2 + 1]
        return max(nums)

複雜度
#

時間 O(n),空間 O(n)。

要特別避免的錯誤
#

  • 奇數位置是 nums[i // 2 + 1],不是 nums[i % 2]。
  • i - 1 // 2 是 i - 0,要寫 (i - 1) // 2。
  • n = 0 時答案是 0。

面試口說整理
#

我照規則生成到第 n 個,偶數位置是一半的位置,奇數位置是一半和一半加一的和,最後取最大值;n 是 0 時直接回傳 0。時間 O(n)。

相關文章

LeetCode 867: Transpose Matrix
·1 分鐘
LeetCode Easy Array Matrix Simulation
LeetCode 867 解題筆記:轉置後的大小是 n × m,res[j][i] = matrix[i][j];Python 可以用 zip(*matrix)
LeetCode 566: Reshape the Matrix
·1 分鐘
LeetCode Easy Array Matrix Simulation
LeetCode 566 解題筆記:元素總數不同就回傳原矩陣;否則第 k 個元素放到 (k // c, k % c)
LeetCode 495: Teemo Attacking
·1 分鐘
LeetCode Easy Array Simulation
LeetCode 495 解題筆記:每次攻擊貢獻 min(到下一次攻擊的間隔, duration),最後一次貢獻完整的 duration
LeetCode 682: Baseball Game
·1 分鐘
LeetCode Easy Array Stack Simulation
LeetCode 682 解題筆記:用 stack 存有效的分數,C 刪掉最後一個,D 加入兩倍,+ 加入最後兩個的和
LeetCode 54: Spiral Matrix
·1 分鐘
LeetCode Medium Array Matrix Simulation
LeetCode 54 解題筆記:維護上下左右四個邊界,依序走右、下、左、上,每走完一邊就把那個邊界往內縮
LeetCode 59: Spiral Matrix II
·1 分鐘
LeetCode Medium Array Matrix Simulation
LeetCode 59 解題筆記:跟 LC 54 一樣維護四個邊界,只是把讀取換成依序填入 1 到 n²