LeetCode283 - 移动零(难度:简单)
链接:https://leetcode-cn.com/problems/move-zeroes
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
解答:时间复杂度O(n),空间复杂度O(1)
class Solution {
public void moveZeroes(int[] nums) {
if(nums == null || nums.length <= 1) return;
// 双指针, 每次循环p的左边都为非0,直到把0全部“挤到”右侧
int p=0, q=1;
while(q < nums.length) {
if(nums[p] != 0) {
p++;
q++;
} else if(nums[q] == 0) {
q++;
} else{
swap(nums, p, q);
}
}
}
private void swap(int[] nums, int p, int q) {
int temp = nums[p];
nums[p] = nums[q];
nums[q] = temp;
}
}