匿名用户
1级
2014-05-25 回答
最直接的办法,用一个数组来作hash,时间复杂度最低,但是有最大值的限制,如下:
#include<stdio.h>
#define MAX_NUM 10000
#define n 10
int main()
{
int b[MAX_NUM] = {0};
int a[n],i,j;
int max = 0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i] >= MAX_NUM)
{
printf("invalid value [%d]! max than %d\n",a[i], MAX_NUM);
return -1;
}
b[a[i]] = 1;
if(a[i] > max)
{
max = a[i];
}
}
int idx = 1;
for(i = 0; i <= max; i++)
{
if(b[i] > 0)
{
b[i] = idx;
idx++;
}
}
for(i=0;i<n - 1;i++)
printf("%d,",b[a[i]]);
printf("%d\n", b[a[n - 1]]);
return 0;
}
-----------
修改过的:
#include<stdio.h>
#define MAX_NUM 10000
#define n 10
int main() {
int b[MAX_NUM] = {0};
int a[n],i,j;
int max = 0;
for(i=0;i<n;i++) {
scanf("%d",&a[i]);
if(a[i] >= MAX_NUM)
return -1;
b[a[i]] = 1;
max = a[i] > max ? a[i] : max;
}
int idx = 1;
for(i = 0; i <= max; i++)
b[i] = b[i] > 0 ? idx++ : b[i];
for(i=0;i<n - 1;i++)
printf("%d,",b[a[i]]);
printf("%d\n", b[a[n - 1]]);
return 0;
}
不过代码长度有这么重要么?代码的可读性和正确性才是第一位的! 如果太纠结于长度,不如把所有代码都写道一行算了。多爽:“看,我的代码一行就搞定了;”