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

LeetCode 3375: Minimum Operations to Make Array Values Equal to K

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

基本資料
#

第一次嘗試:2025/04/09

  • 總花費時間:08:41.14

解題思路
#

題目描述了一個情境:我們需要找到一個整數 h,使得所有大於 h 的整數都是一樣的 —— 但這實際上是一個障眼法。
我們可以把問題簡化為:陣列中不會有重複的數字,並且我們每次找到的 h都等於陣列中最大的數。

所以實際的問題就變成了:我們找幾次 h 會等於 k?

為了解這個問題,我們可以用一個集合來追蹤已經出現過的數,並遍歷 nums 陣列。
當目前的數字大於 k 且不在集合中時,我們就把它加入集合並計一次操作。

當遍歷結束後,我們就知道總共需要幾次操作了。
唯一需要特別處理的情況是:當數字等於 k 的時候 —— 這種情況不需要額外的操作。
因此我們只需要專注在那些大於 k 的數字上。

我的解法
#

class Solution:
    def minOperations(self, nums: List[int], k: int) -> int:
        seen = set()
        op = 0
        for num in nums:
            if num > k and num not in seen:
                seen.add(num)
                op+=1
            elif num<k:
                return -1

        return op

遇到的問題
#

一開始有一些測資失敗,是因為我在處理 num == k 的情況時嘗試使用一個 equal 變數來紀錄是否有出現過 num == k,然後回傳 op + (not equal)。但這樣的寫法會在不必要的情況下多加 1,導致測資失敗。

相關文章

LeetCode 3493: Properties Graph
·1 分鐘
LeetCode Medium Graph Dfs Union-Find Hash-Map
LeetCode 3493 解題筆記:先把每列轉成 set,兩兩比較交集大小建邊,再數連通塊
LeetCode 3494: Find the Minimum Amount of Time to Brew Potions
·1 分鐘
LeetCode Medium Simulation Prefix-Sum Array
LeetCode 3494 解題筆記:每瓶藥先往前推出最後一位巫師的完成時間(每個人都要等自己有空),再往回扣出每位巫師的完成時間
LeetCode 3507: Minimum Pair Removal to Sort Array I
·1 分鐘
LeetCode Easy Simulation Array
LeetCode 3507 解題筆記:n 很小直接模擬,切片賦值右邊要是 list
LeetCode 3508: Implement Router
·2 分鐘
LeetCode Medium Design Binary-Search Queue Hash-Map
LeetCode 3508 解題筆記:queue 管 FIFO、set 判重複、每個目的地一個遞增的時間陣列,查詢用 bisect
LeetCode 3492: Maximum Containers on a Ship
·1 分鐘
LeetCode Easy Math
LeetCode 3492 解題筆記:最多 n² 個格子,重量最多放 maxWeight // w 個,取兩者較小值;用整數除法
LeetCode 1431: Kids With the Greatest Number of Candies
·1 分鐘
LeetCode Easy Array
LeetCode 1431 解題筆記:先算一次最大值,每個人加上額外的糖果後 >= 最大值就是 True;平手也算最多