题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
必须在原数组上操作,不能拷贝额外的数组。
做题直接到移动零
示例
输入
[0,1,0,3,12]
输出
[1,3,12,0,0]
解题
解题思路1
从后往前遍历,遇到0,就把他后边的所有非零位置往前复制一位,最后一位非零的位置赋值为0。
该算法的时间复杂度是O(n^2)的,提交以后,时间只优于20%的结果。
本地代码
#include <cstdio>
#include <vector>
using namespace std;
int n;
vector<int> nums;
void moveZeroes(){
int k = 0;
for(int i=n-1; i>=0; i--){
if(nums[i] == 0){
int j=i+1;
for(; j<n-k; j++){
nums[j-1] = nums[j];
}
k++;
nums[n-k] = 0;
}
}
}
int main(){
scanf("%d", &n);
int t, i=0;
while(i<n){
scanf("%