各位帮忙看一个算法问题,数组的,C#代码

Teng_s2000 2009-09-16 10:44:23
char[] a = new char[] { 'a','b','c','d','e','f','g'};
char[] b = new char[] { 'b', 'd' };

找出a存在,b不存在的元素
要求:
1.不能使用Contains,Remove等类库方法
2.不能破坏数组的结构,C#代码
3.考虑数组已经排序和未排序两种情况

谢谢各位了阿
...全文
302 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqsfd 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lcl_data 的回复:]
引用 17 楼 teng_s2000 的回复:
谢谢cqsfd,给了2种方法

汗,暴力遍历也求代码?
[/Quote]
555太伤心了,我的第二种方法不是暴力遍历啊!要说运行起来的时间效率,以我的理解没其他方法比它更高了吧?要是谁有就贴出来大家学习下嘛!
另:有什么方法可以不需要遍历的吗?再怎么做都要扫描一遍全部数组吧!
cqsfd 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 teng_s2000 的回复:]
谢谢大家,最好给点代码,面试题啊哈哈
[/Quote]
这面试题貌似是考察算法和数据结构啊,还要求不能使用Contains,Remove等类库方法....为什么不直接让你们用C写呢?
char[] a = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
char[] b = new char[] { 'b', 'd' };
int[] t = new int [26];
for (int i = 0; i < b.Length; i++)
{
t[(short)b[i] - 97] = 1;
}
for (int i = 0; i < a.Length; i++)
{
if (t[(short)a[i] - 97] == 0) Console.WriteLine("{0}", a[i]);
}
Console.ReadLine();
楼主看看我写的这个,排不排序一样,基本就是C的思想,空间换时间,哈哈
十八道胡同 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 teng_s2000 的回复:]
char[] a = new char[] { 'a','b','c','d','e','f','g'};
char[] b = new char[] { 'b', 'd' };

找出a存在,b不存在的元素
要求:
1.不能使用Contains,Remove等类库方法
2.不能破坏数组的结构,C#代码
3.考虑数组已经排序和未排序两种情况

谢谢各位了阿
[/Quote]
如果是排序了的,一次遍历就好了。
如果是没有排序的,比较麻烦,不让用类库方法,就是暴力遍历
辛鹤 2009-09-16
  • 打赏
  • 举报
回复
string tmps = "|";
for (int i=0;i <b.length;i++)
{
tmps += b[i].tostring()+"|";
}
for (int i=0;i <a.length;i++)
{
if (tmps.indexof("|"+a[i].tostring()+"|")!=-1)
{
//输出符合条件的a[i];
}
}
Teng_s2000 2009-09-16
  • 打赏
  • 举报
回复
谢谢大家,最好给点代码,面试题啊哈哈
yuanhuiqiao 2009-09-16
  • 打赏
  • 举报
回复
看似不难啊,?
wwweasy 2009-09-16
  • 打赏
  • 举报
回复
上面优点,执行效率比较高,程序简单
xie_yanke 2009-09-16
  • 打赏
  • 举报
回复
先把a 连成字符串: ",a,b,c,d,e,f,g,"
正则一次性替换 "," + b元素1 + ",|," + b元素2 + ",|," ....为",";

split 结果 为数组。

:D
wwweasy 2009-09-16
  • 打赏
  • 举报
回复
string tmps = "|";
for (int i=0;i<b.length;i++)
{
tmps += b[i].tostring()+"|";
}
for (int i=0;i<a.length;i++)
{
if (tmps.indexof("|"+a[i].tostring()+"|")!=-1)
{
//输出符合条件的a[i];
}
}
GoldKi 2009-09-16
  • 打赏
  • 举报
回复
用foreach遍历下就好了
yutian_01261027 2009-09-16
  • 打赏
  • 举报
回复
UP
[Quote=引用 4 楼 cqsfd 的回复:]
看你这数组也不大,没啥时间要求吧?
直接一个个比较就好了,时间复杂度是a.length*b.length;有没有排序一样
char[] a = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
            char[] b = new char[] { 'b', 'd' };
            int t;
            for (int i = 0; i < a.Length; i++)
            {
                t = 0;
                for (int j = 0; j < b.Length; j++)
                {
                    if (a[i] == b[j])  break;
                    t++;
                }
                if(t == b.Length) Console.WriteLine("{0}", a[i]);
            }
            Console.ReadLine();
要是想提高效率,排序大小再比较
[/Quote]
zhouyanfss 2009-09-16
  • 打赏
  • 举报
回复

string bString=b.ToString();
foreach(char tmpA in a)
{
if(bString.IndexOf(tmpA)>-1)
{
//记录
}
}
BitCoffee 2009-09-16
  • 打赏
  • 举报
回复
将b放到List里面,然后用indexof查找
cqsfd 2009-09-16
  • 打赏
  • 举报
回复
看你这数组也不大,没啥时间要求吧?
直接一个个比较就好了,时间复杂度是a.length*b.length;有没有排序一样
char[] a = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };
char[] b = new char[] { 'b', 'd' };
int t;
for (int i = 0; i < a.Length; i++)
{
t = 0;
for (int j = 0; j < b.Length; j++)
{
if (a[i] == b[j]) break;
t++;
}
if(t == b.Length) Console.WriteLine("{0}", a[i]);
}
Console.ReadLine();
要是想提高效率,排序大小再比较
zhouyanfss 2009-09-16
  • 打赏
  • 举报
回复
用dictionary,自带的函数ContainsKey判断,快的很
TTOJJ 2009-09-16
  • 打赏
  • 举报
回复

1.不能使用Contains,Remove等类库方法
2.不能破坏数组的结构,C#代码

考虑数组已经排序(适合大数据的情况)

为数组B建立哈夫曼树,然后从B中查找A数组的所有值,没找到的记录下来即可

未排序(小量数据比较适合)

直接while挨个比对





Knight94 2009-09-16
  • 打赏
  • 举报
回复
排序比较简单,一次遍历即可。

非排序稍微累些,除了傻遍历,估计没有什么简单方法。
Teng_s2000 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lcl_data 的回复:]
引用 17 楼 teng_s2000 的回复:
谢谢cqsfd,给了2种方法

汗,暴力遍历也求代码?
[/Quote]
哈,你有好的办法吗,我开个帖子把分给你

这个帖子只有那个哥们给代码,虽然也是遍历
十八道胡同 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 teng_s2000 的回复:]
谢谢cqsfd,给了2种方法
[/Quote]
汗,暴力遍历也求代码?
Teng_s2000 2009-09-16
  • 打赏
  • 举报
回复
谢谢cqsfd,给了2种方法

111,093

社区成员

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

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

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