【leetcode】移动零

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        p = -1 # 记录第一个0的下标
        for i in range(0, len(nums)):
            # 如果当前元素是0,需要判断是否需要更新p的值
            if nums[i] == 0:
                # 如果p==-1说明当前元素是第一个0,更新p
                if p == -1:
                    p = i
                # 如果p不等于-1,说明遇到的还是0,不做任何操作
                
            # 如果当前元素不是0,需要判断是否需要互换
            else:
                # 如果p不是-1说明数组中有0,那么此时把nums[i]和nums[p]互换
                if p != -1:
                    tmp = nums[i]
                    nums[i] = nums[p]
                    nums[p] = tmp
                    p += 1
                # 否则p==-1说明数组中还没有遇到0,那么此时不做任何操作
                    
        return nums
            

有点类似于快排用到的互换思想
重写优化上述的代码

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
		# Solution 2: 重写代码
        if not nums:
            return 0
		# 两个指针i和j
        j = 0
        for i in range(len(nums)):
            # 当前元素!=0,就把其交换到左边,等于0的交换到右边
            if nums[i]:
                nums[j],nums[i] = nums[i],nums[j]
                j += 1
        return nums

猜你喜欢

转载自blog.csdn.net/ningmengzhihe/article/details/127820722