力扣移动零

力扣移动零

要求

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

思想1

1.记录0出现的次数
2.然后把0从数组中移除 remove(元素) 方法一次只会移除一个元素
3.然后把原数组再拼接上一个[0]乘count的数组就完成了
代码片

下面展示一些 内联代码片

// A code block
var foo = 'bar';
class Solution:
    def moveZeroes(self, nums):
	     """
	     :type nums: List[int]
	     :rtype: void Do not return anything, modify nums in-place instead.
	     """
         count=0
         for i in range(len(nums)):
             if nums[i]==0:
                 count+=1
         for _ in range(count):
 	        nums.remove(0)
       
         nums.extend([0]*count)

思想2

**1. 和思路1的思路相反,判断如果不为0,然后把这数组放入原位置或者前面的几个位置 count **
**2.如果不同,再把count 索引位置加1 **
3.遍历完成后就nums[:count]的数组都是不为0 的,后面的再依此填上0
例如 nums=[1,0,1,2] , 首先count=0,然后就入循环,i=0 发现1不为0,nums[0]=nums[0] count=1 ,然后第二轮,i=1 nums[1]=0 所以不进入循环,第三轮,count=1,i=2 num[2]=1,进入判断条件nums[1]=nums[2],count=2 此时的数组为[1,1,1,2] ,第四轮:count=2 ,i=3 nums[3]=2,不为0,进入判断条件,nums[2]=nums[3] count=3,此时数组为[1,1,2,2],最后再把最后几个位置用0填写上即可
代码片

下面展示一些 内联代码片

// A code block
var foo = 'bar';
class Solution:
    def moveZeroes(self, nums):
	     """
	     :type nums: List[int]
	     :rtype: void Do not return anything, modify nums in-place instead.
	     """
         count = 0
         for i in range(0,len(nums)):
             if(nums[i]!= 0):
                 nums[count] = nums[i]
                 count += 1
         for i in range(count,len(nums)):
             nums[i] = 0
            

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/86522887