3个回答
展开全部
可以定义两个数组,将原来数组的不重复的数放到新数组中就可以了.(如果需要也可以释放原来数组的内存)#include <stdio.h> main() { int a[5]={1,1,2,1,2}; int i,j,k=0, b[5]={0}; for(i=0;i<=4;i++) for(j=0;j<=4;j++) if(a[i]!=b[j]) {b[k]=a[i];k++;} printf("去重后的数组为:"); for(i=0;i<=k-1;i++) printf("a[i]=%d",a[i]); }
展开全部
/*只是个例子 有改进的空间 buf可能不需要 */
/*空间换时间的办法可以用 位图bitmap来做 效率更高*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[]={0,1,0,2,3,1,5,7,2};
int func(int* array,int len){
int i=0,j=0;
int repeat=0;
int* buf=(int*)malloc(len*sizeof(int));
int* flag=(int*)malloc(len*sizeof(int));
memset(buf,0,len*sizeof(int));
memset(flag,0,len*sizeof(int));
for(i=0;i<len;i++)
{
repeat=0;
for(j=i+1;j<len;j++){
if(array[i]==array[j]){
flag[j]=++repeat;
}
}
}
j=0;
for(i=0;i<len;i++)
{
if(flag[i]==0)
{
buf[j++]=array[i];
}
}
memcpy(a,buf,len*sizeof(int));
free(buf);
free(flag);
return j;
}
int main()
{
int newlen,i;
newlen=func(a,sizeof(a)/sizeof(int));
printf("new len %d \r\n",newlen);
for(i=0;i<newlen;i++)
{
printf("%d ",a[i]);
}
printf("\r\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h> #include <malloc.h> using namespace std ; bool isRepeat(int *arr,int len,int elem) { for(int i = 0 ; i < len ; i++) if(arr[i]==elem) return true ; return false ; } int* delRepeat(int *arr,int len) { int *tar = (int*)malloc(sizeof(int)) ; int temp ; unsigned char i ; unsigned char j = 0 ; tar[j] = arr[0] ; for(i=1;i<len;i++) { if(!isRepeat(tar,j+1,arr[i])) { tar = (int*)realloc(tar,sizeof(int)*(j+2)) ; tar[++j] = arr[i] ; } } return tar ; } int main() { int a[5] = {1,2,2,3,3} ; int *b = delRepeat(a,5) ; return 0 ; }
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询