求助,一个算法题 有一个数组a[1000],其中有999个数是不同的数,还有一个是重复的数,用最快的方法把这个重复的数找出来 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在SQL中方便SELECT ID FROM TB GROUP BY ID HAVING COUNT(ID)>=2 for(int i=0;i<1000;i++)for(int j=i+1;j<1000;j++){ if(a[i]==a[j]){ //find it break;}} static void Main(string[] args) { List<int> listsA = new List<int>(); List<int> listsB = new List<int>(); Random rand=new Random(); for(int i=1;i<1000;i++) { listsA.Add(i); } listsA.Add(rand.Next(1000)); for (int i = 0; i < listsA.Count; i++) { if (!listsB.Contains(listsA[i])) { listsB.Add(listsA[i]); } else { Console.WriteLine(listsA[i]); break; } } Console.ReadLine(); } 其实既然知道1000个里面有999个不一样的,那可以这么做,使用一个数组A[1000],初始全部是0,每个表示一个数,开始扫描,一旦对应的数字为A的下标+1,那么相应的A[]的flag加1,这样最多次数是O(2n) 楼上的,怎么会是0(2n)呢?应该是0(n * n)。 就是n+n,2n,不知道你的n*n怎么得出的结果。我第一次扫描相当于构建了一个Hash表,第二次的时候只需要扫描一次,看我构建的值是不是等于2即可 int sum1,sum2;for(int i=0; i<=99; i++){ sum1+=a[i]; sum2+=i;}return sum1-sum2; int sum1,sum2;for(int i = 0;i<999;i++){sum1+=a[i];sum2+=i;}return sum1-sum2; sum(a) - 999*500其中sum(a)是数组a中所有数据的和或者int b=0;int i;for(i = 0; i < 1000; i++) { b ^= i+1; b &= a[i];}return b;b 就是要求的那个数了 sum(a) - 999*500 其中sum(a)是数组a中所有数据的和 或者 int b=0; int i; for(i = 0; i < 1000; i++) { b ^= i+1; b ^= a[i]; } b ^= 1000;return b; b 就是要求的那个数了之前那个写错了。 感觉跟 有一千个X,其中有一个跟其他999个X不同重量的Y,只用一次就那个Y给找出一样 COM对象的多线程问题 comboBox的默认值 求Asp.net中页面跳转的代码 [求助]请大家介绍下编码规范问题。。。 听说SQL SERVER 2005 EXPRESS,数据库本地化,大家给点建议! C#一个画面刷新问题,谢谢了,实在没分了,急呀 C#做一个winform应用,获取天猫单品页的商品描述内容。因商品描述部分是动态加载的,所以无法获取加载后的内容。 如何获得指定数据库的表名 WebClient下载文件出错,如果才能跳过这个错误,继续执行? Crystal Reports许可证问题 会json.net的,进来帮我看一下,好吗? 怎样用幻灯片方式显示照片
for(int j=i+1;j<1000;j++){
if(a[i]==a[j])
{
//find it
break;
}
}
static void Main(string[] args)
{
List<int> listsA = new List<int>();
List<int> listsB = new List<int>();
Random rand=new Random();
for(int i=1;i<1000;i++)
{
listsA.Add(i);
}
listsA.Add(rand.Next(1000)); for (int i = 0; i < listsA.Count; i++)
{
if (!listsB.Contains(listsA[i]))
{
listsB.Add(listsA[i]);
}
else
{
Console.WriteLine(listsA[i]);
break;
}
}
Console.ReadLine();
}
应该是0(n * n)。
int sum1,sum2;
for(int i=0; i<=99; i++)
{
sum1+=a[i];
sum2+=i;
}return sum1-sum2;
{sum1+=a[i];
sum2+=i;
}
return sum1-sum2;
其中sum(a)是数组a中所有数据的和
或者
int b=0;
int i;
for(i = 0; i < 1000; i++) {
b ^= i+1;
b &= a[i];
}
return b;
b 就是要求的那个数了
其中sum(a)是数组a中所有数据的和
或者
int b=0;
int i;
for(i = 0; i < 1000; i++) {
b ^= i+1;
b ^= a[i];
}
b ^= 1000;
return b;
b 就是要求的那个数了
之前那个写错了。