【发布时间】:2016-12-22 14:59:37
【问题描述】:
SPOILER - 该问题包含在线法官问题的解决方案。
我在 LeetCode 上解决了this 的问题。
我的solution 被接受并且优于 92% 的提交。为了优化我的解决方案,我做了一个特别的改变。修改后的解决方案可以在here 找到。我所做的唯一更改如下:
我没有每次都使用s.length()(特别是19次),而是创建了一个新变量int len=s.length()。
我预计性能会有所提高,但新解决方案优于“仅 69% 的提交”,即性能下降 25%。此外,虽然第一种情况下所有测试用例都需要 1ms,但第二种情况下需要 2ms,虽然差异不大,但我完全没有预料到。这可能是什么原因?
【问题讨论】:
-
s.length()已知是常数;int len不一定是常数,因此它可能必须不断重新获取值。 -
你可以改用
final int len,这告诉编译器你的值是一个常数,它可以进一步优化 -
请不要链接到外部站点获取源代码。最好将代码的相关部分包含在您的问题中。
-
您要询问的所有代码都应包含在文本中您的问题中。不接受引用其他地方托管的资源来传达您问题的基本要素。
-
您多久试用一次改进版?在 cpu 时间方面有多大差异? 92% 和 69% 之间的差异可能只是测试系统上的随机 CPU 峰值。
标签: java algorithm compiler-optimization