【发布时间】:2014-09-26 16:56:14
【问题描述】:
任务是创建一个方法,在 int 数组中找到第二大的偶数 int。我被限制使用任何库中的任何方法。
这是适用于所有情况的代码:
public static int getSecondLargestEven(int[] ary) {
int i;
aryLength = ary.length;
int largestEven = -1;
int secondLargestEven = -1;
for (i = 0; i < aryLength; i++) {
if (ary[i] % 2 == 0) {
if (ary[i] > largestEven) {
if (largestEven != -1)
secondLargestEven = largestEven;
largestEven = ary[i];
} else {
if (ary[i] != largestEven) {
if (secondLargestEven == -1 || ary[i] >= secondLargestEven) {
secondLargestEven = ary[i];
}
}
}
}
}
在调用方法之前我要求数组有多个,否则没有方法调用。 所以,当 secondLargestEven == -1 时,我知道有重复。
是否有更有效(更少使用运算符、使用更少循环、更少内存分配)的方式来实现目标?如何改进代码的逻辑?如何整体改进我的代码? 我不喜欢我必须将幻数 -1 分配给 secondLargestEven 和 maximumEven,因为它们在技术上被命名为持有 EVENS。使用循环将数组中的有效偶数分配给 secondLargestEven 和 maximumEven 然后继续搜索是否有效?提前致谢。
【问题讨论】:
-
对于您想要改进的工作代码(运行时、资源或一般样式/架构),您最好在CodeReview.SE
-
您的代码在性能方面似乎很高效,即使它不是很好。代码优雅和最佳效率往往是不相容的
-
@Joel 我认为在大多数情况下,渐近效率与优雅非常兼容。现在减少使用 1 个字节可能会产生丑陋的代码。
-
感谢您查看我的代码!
-
这个问题似乎跑题了,因为关于最佳实践和性能的问题属于codereview.stackexchange.com