给一个数组 nums 写一个函数将 0
移动到数组的最后面,非零元素保持原数组的顺序
1.必须在原数组上操作
2.最小化操作数
错误方法:
class Solution {
public:
/**
* @param nums: an integer array
* @return: nothing
*/
void moveZeroes(vector<int> &nums) {
// write your code here
int n=nums.size();
int i=0,j=n-1;
while(i<j){
while(i<j&&nums[i]!=0){
i++;
}
while(i<j&&nums[j]==0){
j--;
}
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
}
};
错误原因:非零数打乱了顺序。
2.为了保证顺序,采用逐个插入非零元素的方法
class Solution {
public:
/**
* @param nums: an integer array
* @return: nothing
*/
void moveZeroes(vector<int> &nums) {
// write your code here
int n=nums.size();
int i=0;
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(nums[j]!=0){
nums[i]=nums[j];
if(i!=j){
nums[j]=0;
}
break;
}
}
}
}
};