[Leetcode解題] 2460. Apply Operations to an Array

1 March 2025
easy array

題目

2460. Apply Operations to an Array 這題給定一個矩陣,要求做$n-1$次的操作,每次操作會判斷nums[i]==nums[i+1],如果相等的話,就要進行nums[i]*2, nums[i+1]=0,並且最後回傳的矩陣,要把零都往後推。

舉例來說,給定矩陣為[1,2,2,1,1,0]的話,最後要回傳[1,4,2,0,0,0]

解題思路

這題因為是Easy題,其實可以很簡單,就跑過一次矩陣判斷即可

基本思路為另建一個_nums的矩陣,如果不符合條件,就將nums[i]加進去

如果符合條件的話,就將nums[i]*2丟進去,並且從下一個非零的位置開始即可

然後做完全部的判斷後,再將後面補零。

只是這樣的話,我們要另創一個list,我們想有沒有可以inplace操作的方法,在同個矩陣上修改

因為我們發現,每次條件成立時,會多出一個零,然後這個零之後要被推往後面

所以我們可以使用兩個pointer來操作,一個用來記錄現在可以存值的位置在哪裡,一個用來traverse整個矩陣

程式碼

class Solution:
    def applyOperations(self, nums: List[int]) -> List[int]:
        ptr1 = 0
        ptr2 = 0
        while ptr2 < len(nums):
            if nums[ptr2] == 0:
                ptr2 += 1
                continue
            if ptr2 < len(nums) - 1 and nums[ptr2] == nums[ptr2 + 1]:
                nums[ptr1] = nums[ptr2] * 2
                nums[ptr2 + 1] = 0
            else:
                nums[ptr1] = nums[ptr2]
            ptr1 += 1
            ptr2 += 1
        while ptr1 < len(nums):
            nums[ptr1] = 0
            ptr1 += 1
        return nums

複雜度

時間複雜度為$O(n)$