- 配列に対して操作を実行する
0 から始まるインデックスを持つ配列 nums が与えられます。配列のサイズは n で、負でない整数で構成されます。
配列に対して n - 1 のステップを実行する必要があります。ここで、i 番目のステップ (0 から数えて) では、nums の i 番目の要素に対して次の命令を実行する必要があります。
nums[i] == nums[i + 1] の場合、nums[i] の値は元の値の 2 倍になり、nums[i + 1] の値は 0 になります。それ以外の場合は、この手順をスキップしてください。
すべての操作が実行された後、すべての 0 を配列の末尾に移動します。たとえば、配列 [1,0,2,0,0,1] は、すべての 0 を末尾に移動すると [1,2,1,0,0,0] になります。
結果の配列を返します。操作は一度に実行するのではなく、順番に実行する必要があることに注意してください。
例 1:
入力: nums = [1,2,2,1,1,0]
出力: [1,4,2,0,0,0]
説明: 次の操作を実行します。
- i = 0: nums[0] と nums[1] は等しくないため、この手順をスキップします。
- i = 1: nums[1] と nums[2] が等しく、nums[1] の値は元の値の 2 倍になり、>nums[2] の値は 0 になります。配列は[1,4,0,1,1,0]になります。
- i = 2: nums[2] と nums[3] は等しくないため、このステップをスキップします。
- i = 3: nums[3] と nums[4] は等しく、nums[3] の値は元の値の 2 倍になり、>nums[4] の値は 0 になります。配列は[1,4,0,2,0,0]になります。
- i = 4: nums[4] と nums[5] は等しく、nums[4] の値は元の値の 2 倍になり、>nums[5] の値は 0 になります。配列は[1,4,0,2,0,0]になります。
すべての操作が実行された後、すべての 0 が配列の末尾に移動され、結果の配列 [1,4,2,0,0,0] が得られます。
例 2:
入力: nums = [0,1]
出力: [1,0]
説明: 何もできません。0 を最後に移動するだけです。
ヒント:
2 <= nums.length <= 2000
0 <= nums[i] <= 1000
実行結果のスクリーンショット
私のPythonの答え
class Solution(object):
def applyOperations(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
# 遍历列表执行指定操作
nums = [1,2,2,1,1,0]
for i in range(len(nums)-1):
if nums[i] != nums[i+1]:
continue
nums[i] = nums[i]*2
nums[i+1] = 0
# 去掉元素为0的
a = [i for i in nums if i]
# 元素不为0的加上元素0列表并返回
return a+[0 for i in range(len(nums) - len(a))]