我一直在研究InterviewStreet.com上的编码挑战之一,我遇到了一些效率问题。任何人都可以建议我可以更改代码以使其更快更有效吗?
答案 0 :(得分:93)
答案 1 :(得分:3)
首先,对您的代码进行分析,以便了解问题所在。有很多如何做到这一点的例子,这里有一个:https://codereview.stackexchange.com/questions/3393/im-trying-to-understand-how-to-make-my-application-more-efficient
您可以执行大量索引访问,如下所示:
for pair in range(i-1, j):
if coordinates[pair][0] >= 0 and coordinates[pair][1] >= 0:
可以更明白地写成:
for coord in coordinates[i-1:j]:
if coord[0] >= 0 and cood[1] >= 0:
列表理解很酷且“pythonic”,但如果你没有创建4个列表,这段代码可能运行得更快:
N = int(raw_input())
coordinates = []
coordinates = [raw_input() for i in xrange(N)]
coordinates = [pair.split(" ") for pair in coordinates]
coordinates = [[int(pair[0]), int(pair[1])] for pair in coordinates]
我会把所有这些放在一个简单的循环中,或者如果你真的死在列表推导上,将多个转换封装到一个对raw_input()进行操作的函数中。
答案 2 :(得分:2)
This answer显示了我如何找到要优化的代码。 假设有一些代码可以替换,例如,它占40%的成本。 然后它在40%的时间内驻留在调用堆栈上。 如果您取10个调用堆栈样本,它将出现在其中4个,给予或接受。 有多少样本显示它并不重要。 如果它出现在两个或更多,如果你可以替换它,你将节省它花费的任何时间。
答案 3 :(得分:1)
大多数采访街道问题似乎都会以一种方式进行测试,以验证您是否找到了具有正确大O复杂度的算法,而不是以最佳方式编写解决方案。
换句话说,如果由于时间不多而导致某些测试用例失败,则可能需要找出算法复杂度较低的解决方案,而不是微观优化您的算法。这就是为什么他们通常说N可能很大。