随笔-28  评论-51  文章-10  trackbacks-0

面试的常考题,关注算法复杂度和空间,

假如是下面的方法判断是否有重复
int a[MAX] = {0};
unsigned int x;
for(int i=0;i <n;i++)
{
   //读入x
   if(a[x]==1)
   {
       //x重复出现了
   }
   else
   {
       a[x]=1;
   }
}

那么,MAX比较大时就不合适了
但是可以把“用int数组记录是否重复”改为“用每一个bit记录是否重复”,于是变成:
int a[MAX] = {0};
unsigned int x;
const int iBitCount = 32;
for(int i=0;i <n;i++)
{
   //读入x
   if(a[x/iBitCount]& (1 < <(x%iBitCount))!=0)
   {
       //x重复出现了
   }
   else
   {
       a[x/iBitCount] ¦= (1 < <(x%iBitCount));
   }
}

另有,原地排序等O(1),排序后除重等


posted on 2008-04-22 22:47 fullfocus 阅读(847) 评论(2)  编辑  收藏 所属分类: 算法

评论:
# re: (转)判断数组中元素是否重复 2008-04-23 16:25 | 初学者
你为什么不用list自带的方法去判断呢?  回复  更多评论
  
# re: (转)判断数组中元素是否重复[未登录] 2008-04-23 18:25 | fullfocus
同学,这个是面试题啊,如果没有自己的逻辑,用现成的会被BS的,呵呵  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: