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

LeetCode 3810: Minimum Operations to Reach Target Array

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

基本資料
#

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

  • 提交紀錄:Accepted(一次通過)

解題思路
#

選 x 時,所有值等於 x 的位置都會被改成 target,不管它們是不是連在一起。

  • 上界:對每個「不相等的位置上出現的值」各做一次,所有不相等的位置都會被改對。已經相等的位置被改到也沒關係(改成 target 還是一樣)。
  • 下界:一個不相等的位置,只有在選到它目前的值時才會改變。它的值一開始就是 nums[i],在它被改之前都不會變,所以每一種不相等位置上的值都至少要被選一次。

兩者相等,答案就是不同值的個數(Greedy 模板四)。

我的解法
#

class Solution:
    def minOperations(self, nums: List[int], target: List[int]) -> int:
        return len({a for a, b in zip(nums, target) if a != b})

我當時寫成 len(diff) - (len(diff) - len(set(diff))),化簡就是 len(set(diff))。

複雜度
#

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

要特別避免的錯誤
#

  • 題目的「連續段」只是在描述哪些位置會改;同一個值的所有段是一次一起改的,不用分段計算。

面試口說整理
#

選一個值就會把所有那個值的位置改成目標,所以每一種不相等位置上的值做一次就夠。而且不相等的位置只有選到它目前的值才會變,所以每一種都至少要做一次。答案是不相等位置上有幾種不同的值。時間 O(n)。

相關文章

LeetCode 1838: Frequency of the Most Frequent Element
·1 分鐘
LeetCode Medium Sliding-Window Sorting Greedy Prefix-Sum Binary-Search Array
LeetCode 1838 解題筆記:排序後,把視窗裡的數都加到 nums[right] 的花費是 nums[right] × 長度 − 視窗總和;花費 > k 就縮左邊
LeetCode 2271: Maximum White Tiles Covered by a Carpet
·1 分鐘
LeetCode Medium Sliding-Window Greedy Sorting Prefix-Sum Binary-Search Array
LeetCode 2271 解題筆記:地毯的左端放在某段白磚的起點一定不會更差;排序後用雙指針,完整蓋住的段累加,最後一段只算部分
LeetCode 3804: Number of Centered Subarrays
·1 分鐘
LeetCode Medium Hash-Table Enumeration Array
LeetCode 3804 解題筆記:固定左端點往右擴,邊加總邊把元素放進集合,總和在集合裡就算一個
LeetCode 2958: Length of Longest Subarray With at Most K Frequency
·1 分鐘
LeetCode Medium Sliding-Window Hash-Table Array
LeetCode 2958 解題筆記:「求最長」的滑動視窗,剛加入的數字出現超過 k 次就縮左邊
LeetCode 1975: Maximum Matrix Sum
·1 分鐘
LeetCode Medium Greedy Matrix Array
LeetCode 1975 解題筆記:負號可以兩兩搬到任何位置,但負數個數的奇偶不變;奇數個時留一個在絕對值最小的位置
LeetCode 2653: Sliding Subarray Beauty
·1 分鐘
LeetCode Medium Sliding-Window Hash-Table Array
LeetCode 2653 解題筆記:值域只有 -50 到 50,固定視窗用計數陣列維護,每個視窗從 -50 往上累加找第 x 小的負數