描述
给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序
注意事项
1.必须在原数组上操作
2.最小化操作数
样例
给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].
思考
第一反应:冒泡排序, 这里设置了一个 bool 来判断是否已经排序完成(减少无用功)。当然,你也可以再存储上次交换的最后位置来减少比较次数(冒泡排序)
代码
// By Lentitude
class Solution {
public:
/**
* @param nums an integer array
* @return nothing, do this in-place
*/
void moveZeroes(vector<int>& nums) {
// Write your code here
bool isExist;
for (int i = 0; i != nums.size(); ++i){
isExist = false;
for (int j = 1; j != nums.size() - i; ++j){
if (nums[j-1] == 0){
swap(nums[j-1], nums[j]);
isExist = true;
}
}
// 如果isExist == false ,说明此时排序已经完成
if (!isExist){
return;
}
}
}
};