题目描述
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。
输入格式
一共两行。
第一行一个整数 n (0≤n≤10^7)。
第二行包括 n 个整数 ai (−10^4≤ai≤10^4)。
输出格式
输出包括两行。
第一行为一个整数 m,表示删除重复的数字后数组长度。
第二行为 m 个整数。
输入样例1
3
1 1 2
输出样例1
2
1 2
输入样例2
10
0 0 1 1 1 2 2 3 3 4
输出样例2
5
0 1 2 3 4
输入样例3
0
输出样例3
0
注释版代码
#include<iostream>
using namespace std;
const int N=1e7+10;
int n;
int a[N];
int main() {scanf("%d",&n);for(int i=0; i<n; i++) {scanf("%d",&a[i]);}int k=0;for(int i=0;i<n;i++){if(i==0||a[i]!=a[i-1]){a[k++]=a[i];}}printf("%d\n",k);for(int i=0;i<k;i++){if(i==0)printf("%d",a[i]);else printf(" %d",a[i]);}return 0;
}