挺简单一道题,从理论上来说我的写法移动次数最少,看看人家怎么写的吧。
我的解法
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int countZeros = 0;
for (int i = 0; i < nums.size(); i ++){
if (nums[i] == 0){
++countZeros;
}else{
nums[i - countZeros] = nums[i];
}
}
for (int i = nums.size() - countZeros; i < nums.size(); i ++)
nums[i] = 0;
}
};
人家的解法
显然比我写得好看。。。确实啊,这道题计算0的数目哪有计算非0的数目好?下次多想想。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j = 0;
// move all the nonzero elements advance
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
for (;j < nums.size(); j++) {
nums[j] = 0;
}
}
};