1. 程式人生 > 實用技巧 >leetcode_283_移動零

leetcode_283_移動零

給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:

必須在原陣列上操作,不能拷貝額外的陣列。
儘量減少操作次數。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/move-zeroes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
#方法1:快慢雙指標
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        p1=p2=0
        length_of_nums=len(nums)
        #如果p2指向的值是0,p2++,否則與p1指向的值交換,p1左邊是已經處理好的數
        while(p2<length_of_nums):
            if nums[p2]!=0 :
                nums[p1],nums[p2]=nums[p2],nums[p1]
                p1+=1
            p2+=1
#方法2:單指標,先把不是0個向前移到指標的位置
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        p1=0
        length=len(nums)
        for x in nums:
            if x!=0:
                nums[p1]=x
                p1+=1
        for t in range(p1,length):
            nums[t]=0