給一個數組 nums 寫一個函數將 0 移動到數組的最后面,非零元素保持原數組的順序
注意事項
1.必須在原數組上操作
2.最小化操作數
您在真實的面試中是否遇到過這個題?
Yes
樣例
給出 nums = [0, 1, 0, 3, 12], 調用函數之后, nums = [1, 3, 12, 0, 0].
/*
這個也可以通過oj
不過時間復雜度比較高
class Solution {
public:
/**
* @param nums an integer array
* @return nothing, do this in-place
*/
/*
void moveZeroes(vector<int>& nums) {
// Write your code here
int length=nums.size();
for(int j=0;j<length;j++){
for(int i=0;i<length-1-j;i++){
if(nums[i]==0){
//如果當前元素等于0的話,這個元素和下一交換 不管下一個什么什么,一次循環可以確定的是,是最后一個元素編程0
int temp=nums[i];
nums[i]=nums[i+1];
nums[i+1]=temp;
}
}
}
}
};
*/
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int pw = 0;
for (int pr = 0; pr < nums.size(); pr++) {
if (nums[pr] != 0) {
nums[pw] = nums[pr];
pw++;
}
}
// 再把pw指向的元素后面的0補上
for (; pw < nums.size(); pw++) {
nums[pw] = 0;
}
}
};