题解 | #小乐乐与序列#
小乐乐与序列
http://www.nowcoder.com/practice/9a1c1c764ce04fed8ceff7714e74d3b6
#include<stdio.h>
#include<stdlib.h>
int cmp(const int *a,const int *b)
{
return *(int *)a-*(int *)b;
}
int main(void)
{
int n;
scanf("%d",&n);
int *a=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(int),cmp);//调用了c语言的库函数快排函数,这是解法1
/* for(int i=0;i<n-1;i++)//冒泡排序;第一次用冒泡排序超时了
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
*/
int l=0,r=1;//定义l和r变量,分别指向数组的前面的打印元素和后面的扫描元素
while(r<n)//打印时去重打印,
{
if(a[l]==a[r])//如果遇到l和r的元素相同时,r++;
r++;
else//如果不同时,则先把l指向的元素打印,再直接把l挪到r的位置
{
printf("%d ",a[l]);
l=r;
r++;
}
}
printf("%d",a[r-1]);//要知道最后一个r指向的元素未打印,所以补上
return 0;
}