Given an array nums, write a function to move all 0's
to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should
be [1, 3, 12, 0, 0].
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
//将所有的非0数向前尽可能的压缩,最后把没压缩的那部分全置0就行了。比如103040,先压缩成134,剩余的3为全置为0
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int pos = 0;
for (int i = 0; i < nums.size(); ++i){
if (nums[i] != 0)
{
nums[pos] = nums[i];
pos++; //利用pos记录压缩到的位置
}
}
//将后面的数全置为0
for (int j = pos; j < nums.size(); j++){
nums[j] = 0;
}
}
};

本文介绍一种高效算法,用于将数组中的所有零元素移动到数组末尾,同时保持非零元素的相对顺序不变。该算法通过一次遍历实现原地修改,降低了额外空间复杂度,并减少了操作次数。
154

被折叠的 条评论
为什么被折叠?



