给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]
输出:[0]
双指针办法
用j统计0的出现次数,将所以非有的元素按次序排序,非0的统统都赋给nums[j],剩下的位置全部赋零
class Solution {
public:void moveZeroes(vector<int>& nums) {if(nums.size() == 0)return;int j = 0;for(int i = 0; i < nums.size(); i++){if(nums[i] != 0)nums[j++] = nums[i];}for(int i = j; i < nums.size(); i++){nums[i] = 0;}}
};
冒泡排序(改)的办法(很辣鸡,但简单),冒泡排序是稳定排序,将零当做最大的泡泡移动到后面
class Solution {
public:void moveZeroes(vector<int>& nums) {for(int i = 0; i < nums.size() - 1; i++){for(int j = 0; j < nums.size() - 1; j++){if(nums[j] == 0){swap(nums[j], nums[j+1]);}}}}
};