leetcode双指针算法--去掉0

mac2026-03-28  7

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

示例:

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/move-zeroes 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 这道题解法很多. 比如先把非0的都放到前面.后面的补0 或者更简洁.不补0.双指针,在遍历过程中.两个变量.慢指针原地不动.快指针向前遍历,发现非0就把值传给慢指针.同时快指针变0.然后快慢指针继续向前. 代码

class Solution { public void moveZeroes(int[] nums) { // 快慢指针.快指针i每次都前进.慢指针j是当遇到非零元素交换后才往前走.若i,j int j = 0; for(int i = 0;i < nums.length;i++) { if (nums[i] != 0 && i != j) { nums[j++] = nums[i]; nums[i] = 0; } else if (nums[i] != 0 && i == j){ j++; } } } }
最新回复(0)