问题描述
给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。
例如:数组 A={1,1,2},你的程序应该输出 22 即新数组的长度,新数组为 {1,2}。
要求:不能新开数组分配额外的空间,即常数空间限制。
输入格式
输入一个整数n(1≤n≤1000)。
接下来一行 n 个整数 A i(−1000≤A i≤1000),表示数组 A 中的每个元素。
输出格式
输出一个整数,表示新数组长度。
样例输入
5
0 0 1 1 2
样例输出
3
C++代码示例
#include <iostream>
#include <malloc.h>
using namespace std;
int removeElement(int A[],int n);
int main()
{
int n,elem;
int *A;
cin>>n;
A = (int*)malloc(n*sizeof(int));
for(int i=0; i<n; i++)
{
cin>>A[i];
}
removeElement(A,n);
return 0;
}
int removeElement(int A[],int n)
{
int index = 0;
for(int i=0; i<n; i++)
{
if(A[i]!=A[i+1])
{
index++;
}
}
cout<< index;
}
备注
该问题的程序代码是在上一篇博客中,元素移除问题的基础之上进行修改的。代码原理比较简单,就是多次循环,判断是否有跟起始点重复的元素,如果没有的话,那么计数器就会加1。