leetcode hot100-03 移动零
移动零
地址:https://leetcode.cn/classic/problems/move-zeroes/description/
难点:
- 在原数组的基础上进行移动
- 保持相对顺序思考过程:
思考过程:
- 
一开始没有考虑顺序的问题 - 记录最后一个不是0的位置
- 从左遍历数据
- 如果为0 则将数据与最后一位不是0的数据交换
- 最后不是0的数据更新位置
- 最后一位不是0的数据和左指针重合则退出
 虽然能到达最后一位都是0的效果,但是最终顺序变了 
- 
思考顺序的问题 - 换一个思路,一个指针指向第一个为0的,第二个指针指向第一个不为0的
- 两边交换,第一个指针+1 ,原来第二个为0的变为第一个为0的
- 往复执行
 
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i,j = 0,0
        for j in range(len(nums)):
            if nums[j] !=0:
                nums[i],nums[j] = nums[j],nums[i]
                i += 1
func moveZeroes(nums []int) {
    i, j, l := 0, 0, len(nums)
    for j <l {
        if nums[j]!=0{
            nums[j],nums[i] = nums[i],nums[j]
            i ++
        }
        j ++
    } 
}
其实这个双指针和快排序的思路很像
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号