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

LeetCode 3819: Rotate Non Negative Elements

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

基本資料
#

難易度: medium 第一次嘗試:2026-01-25

  • 提交紀錄:Runtime Error → Accepted

解題思路
#

負數不動,所以只處理非負數(Array 模板五):記下非負數的位置和值,值左旋 k % m(m 是非負數個數),再依序填回那些位置。

我的嘗試
#

第一版沒處理「一個非負數都沒有」:k % len(non_neg) 變成對 0 取模。例如 nums = [-1]、k = 2:直接 ZeroDivisionError。加上特判就 AC 了。

正確解法
#

class Solution:
    def rotateElements(self, nums: List[int], k: int) -> List[int]:
        idx = [i for i, x in enumerate(nums) if x >= 0]
        if not idx:
            return nums
        vals = [nums[i] for i in idx]
        k %= len(vals)
        vals = vals[k:] + vals[:k]                 # 左旋 k 格
        res = nums[:]
        for i, v in zip(idx, vals):
            res[i] = v
        return res

複雜度
#

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

要特別避免的錯誤
#

  • 取模之前先確定非負數的個數不是 0。
  • 左旋是 vals[k:] + vals[:k]。

面試口說整理
#

我把非負數的位置和值抽出來,值左旋 k 格之後依序放回那些位置,負數保持不動。非負數一個都沒有就直接回傳。時間 O(n)。

相關文章

LeetCode 3679: Minimum Discards to Balance Inventory
·1 分鐘
LeetCode Medium Sliding-Window Hash-Table Simulation Counting Array
LeetCode 3679 解題筆記:規則已經決定哪些要丟,直接模擬;長度 w 的視窗只計算「留下來」的到貨,被丟掉的離開視窗時不能再扣
LeetCode 735: Asteroid Collision
·1 分鐘
LeetCode Medium Array Stack Simulation
LeetCode 735 解題筆記:從左到右用 stack,只有「stack 頂端往右、目前的往左」才會相撞,小的爆掉,一樣大一起爆
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²
LeetCode 2105: Watering Plants II
·1 分鐘
LeetCode Medium Two-Pointers Simulation Array
LeetCode 2105 解題筆記:Alice 從左、Bob 從右,對撞指針模擬澆水;相遇在同一株時由水比較多的人澆
LeetCode 1222: Queens That Can Attack the King
·1 分鐘
LeetCode Medium Array Matrix Simulation
LeetCode 1222 解題筆記:從國王往八個方向一步一步走,每個方向第一個遇到的皇后就能攻擊;皇后放進集合方便查詢