【求知=>算法】移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解题思路
- 直接判断当前值是否等于0,如果等于0就删除掉,然后在末尾补0
nums = [0,1,0,3,12]
for j in nums:
if j == 0:
nums.remove(j)
nums.append(j)
else:
pass
- 双指针思路:
j指针向右移动,遇到等于0的情形不进行操作,而i代表此时为0的总个数。
如果此时i的总个数不为0,就将j-i的位置即第一个0的位置和当前不为0的j的位置交换,循环往复,就将不为0的j都换到了前面去。
nums = [0,1,0,3,12]
i = 0
for j in range(len(nums)):
if nums[j] ==0:
i+=1
elif i!=0:
nums[j-i] = nums[j]
nums[j]=0
博客来源:雨夜的博客