(这里的变体就是#29 Remove Element)
1、最基础的就是冒泡,一个一个比较、交换位置
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int i = 1; i < nums.size(); i++){
if(nums[i] != 0){
int ptr = i;
while(nums[ptr-1] == 0 && ptr > 0){
nums[ptr-1] = nums[ptr];
nums[ptr] = 0;
ptr--;
}
}
}
}
};
然而,实际上目的是将0放到最后去,即:前x个位置是非零数。将每一个数字找出来按照次序放到前面,最后统一补齐0即可。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j = 0, size = nums.size();
for(int i = 0; i < size; i++){
if(nums[i]){
nums[j] = nums[i];
j++;
}
}
while(j < size){
nums[j++] = 0;
}
}
};
本文介绍了一种将数组中零元素移至末尾的高效算法。通过遍历数组,将非零元素依次放置于数组前端,并在遍历完成后将剩余位置填充为零,实现了数组的有效整理。
442

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



