ほぼ日刊競プロ leetcode 283. Move Zeroes

283. Move Zeroes

Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.

考えたこと

新しい配列を作らずに,配列の中身を入れ替える必要がある.初めにバブルソートでやったら時間が足りず失敗した.

class Solution:
   def moveZeroes(self, nums: List[int]) -> None:
       """
       Do not return anything, modify nums in-place instead.
       """
       change = True
       for i in range(len(nums)):
           if not change: 
               break
           change = False  
           for j in range(len(nums) - i -1):
               if nums[j] ==0: 
                   nums[j], nums[j+1] = nums[j+1], nums[j] #前後入れ替え
                   change = True 
       return nums


次にlistを後ろから探索することにした.後ろから探し,0が見つかれば消し,appendすることで一番後ろに0をくっつけることになると考えた.

 ​
class Solution:
   def moveZeroes(self, nums: List[int]) -> None:
       """
       Do not return anything, modify nums in-place instead.
       """
       for i in range(1,len(nums)+1):
           if nums[-i]==0:
               nums.pop(-i)
               nums.append(0)
       return nums       
             

いいなと思ったら応援しよう!