给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
提示:
1 <= nums.length <= 10^4
-2^31 <= nums[i] <= 2^31 - 1
解答:使用双指针,指针分别为left和right,用right遍历数组:1. 如果遇见非零元素就开始给left指向的元素赋当前元素的值,并且移动left指针+1。2. 如果遇见零元素就忽略。(right和left一起移动,直到有零元素,left就会被卡住,需要等到right遇到非零元素left才能移动,这样遍历完之后不仅可以保证[left, right)这个区间是0元素,还能保证非零元素的相对位置。)
思路:王尼玛
class Solution {
public void moveZeroes(int[] nums) {
int left = 0; // 左指针
int right; // 右指针
for (right = 0; right < nums.length; right++) {
if (nums[right] != 0) nums[left++] = nums[right];
}
for (int i = left; i < nums.length; i++) nums[i] = 0;
}
}