一、题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明: 必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
二、思路分析:
题目说明不能开辟新的数组,应该就是考察对下标的控制。
保证时间复杂度的基础上 考虑双下标实现。
需要特别注意连续0的情况下标的控制。
三、AC 代码:
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for (int i = 0; i < nums.length-1; i++) {
if (nums[i] == 0){
nums[index] = nums[i+1];
index = nums[i+1] == 0 ? index : index+1;
nums[i+1] = 0;
}else {
index++;
}
}
}
}
四、总结:
一维数组的操作大都可以把时间复杂度控制在O(n)
“本文正在参与「掘金 3 月闯关活动」,点击查看活动详情。”