[算法]来玩玩算法吧-数组对比的问题

Red_angelX 2007-04-18 04:24:31
借wangjianjun02 (啊龙)的帖子
http://community.csdn.net/Expert/TopicView3.asp?id=5470821

有两个数组:

int[] a = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] b = new int[]{1,2,3,4,5,6,7,8};

有什么方法快速的找出这两个数组中不同的数字?

大家都动手写下 最后评测下谁的速度最快
...全文
340 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiatong1981 2007-04-20
  • 打赏
  • 举报
回复
呵呵 这个题是老了点而且简单了点 不过原理一样 和那个房顶颜色的题一样的东东

lz强人么 10秒就搞定 看来思维很理性哦
Red_angelX 2007-04-18
  • 打赏
  • 举报
回复
楼上题这个高中班主任就考我,被我10s搞定弄得他很没面子
wzq6511 2007-04-18
  • 打赏
  • 举报
回复
应该是丙会开口说话,首先甲乙都是不可能的,丁可以看到前面两个人的帽子,乙丙的帽子颜色不一样,所以丁肯定不敢开口说话,丙看到乙的帽子颜色,如果他的帽子颜色跟乙一样,丁肯定会出来说话,丁不说话,说明自己的帽子颜色跟乙肯定不一样。所以丙就知道自己帽子的颜色。哈哈复杂吧!!!
jiatong1981 2007-04-18
  • 打赏
  • 举报
回复
二师兄 不要生气哦
jiatong1981 2007-04-18
  • 打赏
  • 举报
回复
hoho 我也借个地方

这会没事
xyq1986 2007-04-18
  • 打赏
  • 举报
回复
两个都sort一下,再从头到尾扫一遍
jiatong1981 2007-04-18
  • 打赏
  • 举报
回复
甲,乙,丙,丁四个人得罪了皇帝,皇帝要惩罚他们,手段比较委婉,他是这么做的:有一座高墙,甲站在墙的一边,面朝墙,乙,丙,丁站在墙的另一边,面朝墙站成一条 线,乙最前,丙在中间,丁在最后,他们都面向墙的。将甲,乙,丙,丁四个人的眼睛蒙上,给他们各自戴上一顶帽子,帽子的颜色分别是红,红,蓝,蓝。将他们眼睛上的纱布拿开,他们不能看自己头上帽子的颜色,站在前面的人看不到后面人头上帽子的颜色,站在后面的人可以看到前面人头上帽子的颜色。他们中只要有人正确说出自己头上帽子的颜色,四个人都释放,一旦说错,四人都处死。注意,只有一次开口说话的机会。他们都很聪明,问:谁最后会开口说话?
shrinerain 2007-04-18
  • 打赏
  • 举报
回复
这种题太"经典"了...来点有难度的吧...+

想再快点的话,对于纯数字来说,快排并不是最优.

blackhero 2007-04-18
  • 打赏
  • 举报
回复
在公司没有事,好好睡一觉多好,搞什么算法呀
我现在不愿思考
Red_angelX 2007-04-18
  • 打赏
  • 举报
回复
最后用大容量的int[]来比 肯定小不了 自己测试的时候用这个来看有错误没
shrinerain 2007-04-18
  • 打赏
  • 举报
回复
数据太小,没意义...
Red_angelX 2007-04-18
  • 打赏
  • 举报
回复
最后换大容量int[]进行比较
Red_angelX 2007-04-18
  • 打赏
  • 举报
回复
我先帖我的 抛砖引玉
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] b = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };

Stopwatch sw = new Stopwatch();
sw.Start();

//***********
//算法开始
//***********

//快排
Array.Sort(a);
Array.Sort(b);

List<int> list = new List<int>();

int a_len = a.Length;
int b_len = b.Length;
for (int i = 0,j=0; i < a_len || j < b_len ; )
{
if (a[i] == b[j])
{
i++;
j++;
}
else if (a[i] < b[j])
{
list.Add(a[i]);
i++;
}
else
{
list.Add(b[j]);
j++;
}

//判断一组扫完的情况 即==的情况
if (i >= a.Length)
{
for (; j < b.Length; j++)
{
list.Add(b[j]);
}
}
if (j >= b.Length)
{
for (; i < a.Length; i++)
{
list.Add(a[i]);
}
}
}

//******************
//算法结束
//******************
sw.Stop();
Console.WriteLine(sw.Elapsed.Ticks);
for (int i = 0; i < list.Count; i++)
Console.Write("{0} ", list[i]);
Console.Read();
}
}
}


结果 (Release模式)
231 (时间)
9 10


110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧