【发布时间】:2010-02-28 20:29:38
【问题描述】:
我正在准备软件工作面试,但在就地数组修改方面遇到了麻烦。
例如,在 out-shuffle 问题中,您将数组的两半交错,这样 1 2 3 4 5 6 7 8 将变为 1 5 2 6 3 7 4 8。 This question 要求提供恒定内存解决方案(和线性时间,尽管我不确定这是否可能)。
起初我认为线性算法是微不足道的,但后来我无法解决。然后我确实找到了一个简单的O(n^2) 算法,但我花了很长时间。而且我仍然没有找到更快的解决方案。
我记得在解决 Bentley 的 Programming Pearls 第 2 列中的类似问题时也遇到了麻烦:
将数组向左旋转
i位置(例如abcde旋转 2 变为cdeab),及时O(n)并且只有几个字节的额外空间。
有没有人可以帮助我解决这些问题?
【问题讨论】:
-
这是一个软件工程职位。
-
@Pavel:你应该是人力资源部门的,你应该有能力通过一篇帖子来估计编程技能
-
@Pavel,我认为他的问题与对工程充满热情的人不相上下;他在问他关心的事情。我无法接近回答他的问题,但享受作为 Web 开发人员的成功职业,解释一下。 +1 询问。
-
这个问题比人们想象的要难(O(n) 时间和 O(1) 空间)。我建议你们所有人在建议 OP 采取其他措施之前,针对各种 n 值运行解决方案。
-
@Pavel Shved :很抱歉,但您的评论很荒谬。实际上,这不仅对提出此问题的人而且对堆栈溢出的一般用户而言都太令人沮丧了。请不要再发布此类 cmets 。这是一个真诚的要求....呵呵!!!!