#include <iostream>
using namespace std;
void func(int *p, int n);
int main() {
int arr[6] = {0};
for (int &i: arr) {
cin >> i;
}
func(arr, 6);
for (int i = 0; i < 6; i++) {
if (i == 5) {
cout << arr[i] << endl;
} else {
cout << arr[i] << " ";
}
}
return 0;
}
void func(int *p, int n) {
int zerosMoved = 0; // 记录已经移动的零元素数量
for (int i = 0; i < n - zerosMoved;) {
if (*(p + i) != 0) {
i++;
} else {
for (int j = i; j < n - 1; j++) {
*(p + j) = *(p + j + 1);
}
*(p + n - 1) = 0;
zerosMoved++; // 零元素数量增加
}
}
}
移动法实现,但是时间复杂度是$O(n^2)$,更好的办法就是双指针。



京公网安备 11010502036488号