【发布时间】:2012-06-01 18:58:58
【问题描述】:
我今天被问到这个问题,我知道答案很简单,但他让我一直坚持到最后。
问题
编写一个程序来删除存储在包含1 - 100 的ArrayList 中的偶数。
我只是说哇
这就是我的实现方式。
ArrayList source = new ArrayList(100);
for (int i = 1; i < 100; i++)
{
source.Add(i);
}
for (int i = 0; i < source.Count; i++)
{
if (Convert.ToInt32(source[i]) % 2 ==0)
{
source.RemoveAt(i);
}
}
//source contains only Odd elements
转折
他问我这个给他一个方程的计算复杂度是多少。我刚刚做了并说这是与 N(输入)成正比的线性。
他说:嗯.. 所以这意味着当输入大小增加时我需要等待更长的时间才能得到结果,对吗? Yes sirr you are
为我调整它,让它Log(N) 尽可能多地尝试他说的。这部分我失败得很惨。
- 因此,请来这里寻找正确的逻辑、答案或算法来执行此操作。
注意:他不需要 Linq,不需要额外的花里胡哨。只是简单的循环或其他逻辑来做到这一点
【问题讨论】:
-
LINQ 无济于事,它只会把那些肮脏的工作留在幕后
-
没关系。你不能使用 LINQ 来删除东西。而且使用数组并不总是很有效。
-
由于结果是 O(N),并且你删除了 O(N) 个元素,你不能得到比 O(N) 更好的结果。
-
很可能他想听到的是不可能(有理由):) 或者只是想看看你的方法或思维过程。
-
由于
i总是递增,这不会错过每第二个连续偶数项吗?