题目链接
题目描述
实现代码
思路:由于题目要求不能复制数据,可以看成是要求常数级空间复杂度;
我们可以从前往后对数组进行遍历,给与一个标记step和一个索引标记needChange,如果遍历找到了0,则修改标记step,表示后面的遍历都需要前移,同时通过needChange记录前移的位置;在遍历完成之后还需要将所有0放入数组尾部,通过needChange进行判断遍历至数组尾部添加0即可;
实现代码如下:
class Solution {public void moveZeroes(int[] nums) {int len = nums.length;if(len == 1) {return;}int step = 0;int needChange = -1;for(int i=0; ; ) {if(i>len-1) {break;}if(nums[i] == 0) {if(needChange == -1) {needChange = i;}step++;i++;continue;}if(step != 0) {nums[needChange] = nums[i];needChange++;i++;continue;}i++;}if(needChange != -1) {for (; needChange < len; needChange++) {nums[needChange] = 0;}}return;}}
