上天对我不公啊!这么简单的华为面试题当时竟没有答出来

INTTNY 2010-06-05 08:15:22
有道题List<Employee> source,需要查询
1、所有姓李的人
2、从source中排除行李的人

我问了是否可以使用LINQ,他说可以,于是乎作答如下:

1、var AllLi = source.Select(p => p.FirstName == "Li")
2、source = source.Except(AllLi);


很简单。然后他又说,如果不能用LINQ,排除姓李的该怎么做
作答如下:

var NoLi = List<Employee>(source.Count);
foreach(Employee e in source)
{
if(e.FirstName != "Li") NoLi.Add(e);
}
return NoLi;


很简单。他说这样效率不是低了吗?我说这样并没有使效率变低啊因为同是一次循环,所以时间复杂度仍然是O(n),只是空间增加了一个m,变成了n+m而已。
然后他又要求说仅用一次循环并且中间不许产生其他数组变量,该怎么做。
很可恶,要求怎么那么多!!当时我就愣了一下,因为平常上述方法就可以了,没去想别的东西,于是我就说我需要考虑下。过了不到半分钟他就说那这道题就这么算了。

面试后出来我用了不到三分钟就想到了解答,其实很简单,思路就是操作source,只是foreach中不能修改源所以我楞了下而已,实际上的解答代码就几行,如下:

int curIndex = 0;
while(curIndex < source.Length)
{
Employee e = source[curIndex];
if(e.FirstName == "Li") source.Remove(e);
else curIndex++;
}


可恶!究竟是他没给够我三分钟呢,还是我的水平太差了?想这个这么简单的东西是不是不用三分钟啊?思维有点定向了,脑中满是LINQ和使用temp了,并且我还认为这个是完成这种问题的标准解答,唉!我只有一年工作经验,不知各位认为是我的水平差了些呢,还是面试官太过于着急呢?各位又用了多少时间想出本题答案?



前面问的都是些简单的HTML和利用CSS做出效果等等简单的问题,就不说了。在此给出后面问的一些问题,都是敏捷设计模式的。虽然我都答出来了,但他似乎不是很满意,大家讨论下:


(*)你知道单一职责原则吗?为何需要使用单一职责,有何好处?

(*)怎么理解依赖倒置(DIP)?使用DIP有何好处?
...全文
7349 239 打赏 收藏 转发到动态 举报
写回复
用AI写文章
239 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangwangtianxia 2011-08-03
  • 打赏
  • 举报
回复
围观了, 受教
Acmey 2010-06-16
  • 打赏
  • 举报
回复
不错!
fancanqin 2010-06-14
  • 打赏
  • 举报
回复
楼主接分
rddlwyf 2010-06-14
  • 打赏
  • 举报
回复
这要好好学一下。
zdzyh1989 2010-06-13
  • 打赏
  • 举报
回复
学习,
  • 打赏
  • 举报
回复
学习了,谢谢楼主,要加油啊
wufanglu 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 sunpire 的回复:]

不能用 Linq ,我就第一反应就是使用 Remove ,不过也不是像楼主这样使用 Remove ,事实上楼主的这个答案是错误的。 如果再给楼主三分钟,楼主能得到正确答案么?
C# code

int curIndex = 0;
while(curIndex < source.Length)
{
Employee e = source[curIndex];
if(e.Firs……
[/Quote]
谁叫你从前面移?要从后倒过来移。这是以前老犯的错误,且很难找到原因。
wufanglu 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyazhe 的回复:]

从刚开始我就想到删除非Li的元素了,你太紧张了。
[/Quote]
我一般是想着Clone一份,然后再从其中删,Delphi时代操作数据遗留下来(试出来速度)的思维。
像这样中间段的题,我是很少考滤从source中删元素的,这样不安全,可能是职业病。
x_q123456 2010-06-12
  • 打赏
  • 举报
回复
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
第三方胜多负少服务而温热我认为饿死的发生的案发生地方为二为二我认为七日企鹅王特
skyaspnet 2010-06-11
  • 打赏
  • 举报
回复
看看。。。。
超级大笨狼 2010-06-11
  • 打赏
  • 举报
回复
List.Find(delegate(Employee x){return x.Name.indexOf("李")<0;});

是考你匿名函数吧。

还有类似这样的问题:
List.Sort(Icompare);
匿名函数实现接口。
wdzr_826 2010-06-10
  • 打赏
  • 举报
回复
恭喜楼主!学会举一反三了!!
恶魔 2010-06-10
  • 打赏
  • 举报
回复
看来要学习的东西还有很多啊
蠢蠢的程序园 2010-06-10
  • 打赏
  • 举报
回复
这个人人心中的答案都不一样。楼主的没有问题,有问题的是考官。。考官认为你行你就行,他认为你不行你就不行。一般的问题不是在于你技术有问题,而是在于他一开始就不想要你。。
tf1008 2010-06-10
  • 打赏
  • 举报
回复
比我强多了。我直接蒙了……
qq410029478 2010-06-10
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
C瓜哥 2010-06-10
  • 打赏
  • 举报
回复
路过…………………………………………………………………………………………………………………………………………
quickily 2010-06-10
  • 打赏
  • 举报
回复
路过。。。
abiho 2010-06-10
  • 打赏
  • 举报
回复
题目不是找【李】吗?为什么不是=="李",而是=="Li",而且也不用判断大小写,有点奇怪,是不是前面还有Employee的说明
tangxia144 2010-06-10
  • 打赏
  • 举报
回复
哇,厉害啊
加载更多回复(215)

110,529

社区成员

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

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

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