https://leetcode-cn.com/problems/move-zeroes/solution/283yi-dong-ling-shuang-zhi-zhen-yi-chu-y-kgkh/
难度:简单
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
这道题有两个思路,都满足题目的要求。 双指针
- 初始left、right 指针都指向下标0
- 开始移动right指针,当right指针不等于0是,左右指针对应元素互换 移除元素 类似题目:27.移除元素
- 初始化left = 0,然后开始循环数组,遇到非0的数字,赋值给left,left+=1
- 循环left走到len(nums) - 1,将剩余的index都替换成0.
class Solution:
def moveZeroes(self, nums):
l = r = 0
while r < len(nums):
if nums[r] != 0:
nums[l], nums[r] = nums[r], nums[l]
l += 1
r += 1class Solution {
public void moveZeroes(int[] nums) {
int left = 0;
for (int right = 0; right < nums.length; right++) {
if (nums[right] != 0) {
int tmp = nums[right];
nums[right] = nums[left];
nums[left] = tmp;
left++;
}
}
}
}class Solution:
def moveZeroes(self, nums):
left = 0
for i in nums:
if i != 0:
nums[left] = i
left += 1
while left < len(nums):
nums[left] = 0
left += 1欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。
有喜欢力扣刷题的小伙伴可以加我微信(King_Uranus)互相鼓励,共同进步,一起玩转超级码力!
我的个人博客:https://qingfengpython.cn