给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
分析:
题目就是说把前面的零全部用后面的数字填上就行了,要填上为零的数字并且要保持相对位置不变,我就想到前后指针,head指向当前需要移动的位置,rear指向当前需要填充的位置,一前一后,前者决策,后者执行。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int rear = 0;//指针
for(int head=0;head<nums.size();head++){
if(0 != nums[head]){
nums[rear] = nums[head];
rear += 1;
}
}
while(rear < nums.size()){
nums[rear++] = 0;
}
}
};
本文介绍了一种高效算法,用于将数组中的所有零元素移动到数组末尾,同时保持非零元素的原始顺序。通过使用前后指针技巧,该算法在原地操作,避免了额外内存的使用,降低了操作次数。
707

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



