[Leetcode] 2460. Apply Operations to an Array (Easy)

概述

題目

https://leetcode.com/problems/apply-operations-to-an-array/
有點神奇的題目 XD,先從頭掃到尾,看是否有相鄰數字相同的組合,若有則前者 double、後者砍半,最後再左推非零數字

心得

本來誤解題目還想說是否由後往回做,後來確認只是模擬題,故操作完即可

Array

思路

先模擬後推數補零

程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution(object):
def applyOperations(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
for i in range(n-1):
if nums[i+1] == nums[i]:
nums[i] *= 2
nums[i+1] = 0
arr = []
for i in range(len(nums)):
if nums[i] != 0:
arr.append(nums[i])
while len(arr) < len(nums):
arr.append(0)
return arr

若是要 in-place 的話,以同向雙指針的方式做交換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution(object):
def applyOperations(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
for i in range(n-1):
if nums[i+1] == nums[i]:
nums[i] *= 2
nums[i+1] = 0

l = 0
for r in range(n):
if nums[l] == 0 and nums[r] != 0:
nums[l], nums[r] = nums[r], nums[l]
elif nums[l] != 0:
l += 1

return nums

Complexity

Time Complexity: O(n)
只在橫向 n 個數中操作,故 O(n)

Space Complexity: O(1)
基本上無使用到額外空間