给一个数组 nums 写一个函数将 0
移动到数组的最后面,非零元素保持原数组的顺序
样例
例1:
1 2
| 输入: nums = [0, 1, 0, 3, 12], 输出: [1, 3, 12, 0, 0].
|
例2:
1 2
| 输入: nums = [0, 0, 0, 3, 1], 输出: [3, 1, 0, 0, 0].
|
注意事项
1.必须在原数组上操作 2.最小化操作数
解法
算法:双指针,简单粗暴。用两个指针 right
和
left
,right
用来右移数组,碰到不为0
的元素就赋值到 left
指针处。时间复杂度:\(O(N)\)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Solution { public void moveZeroes(int[] nums) { int right = 0; int left = 0; int length = nums.length; while (right < length) { if (nums[right] != 0){ nums[left] = nums[right]; left += 1; } right += 1; } for(int i = left; i < length; i++) { nums[i] = 0; } } }
|