【发布时间】:2018-11-07 10:10:12
【问题描述】:
我正在 codility.com 上执行一项任务,但出现超时错误。代码和任务描述如下。
任务文本(数组已初始化):class Solution { public int solution(int[] A); } 给定数组A 的N 整数,返回在@ 中不出现的最小正整数(大于0) 987654324@.
例如,给定A = [1, 3, 6, 4, 1, 2],函数应该返回5。给定A = [1, 2, 3],函数应该返回4。给定A = [−1, −3],函数应该返回1。
为以下假设编写一个有效的算法:N 是 [1..100,000] 范围内的整数;数组A 的每个元素都是 [−1,000,000..1,000,000] 范围内的整数。
class Solution {
public int solution(int[] A) {
int k;
for (int i = 1;; i++) {
final int j = i;
if (!Arrays.stream(A).anyMatch(x -> x != j)) {
k = j;
break;
}
}
return k;
}
}
【问题讨论】:
-
您的问题没有在任何地方说明 A 的内容。所以它不能被其他人复制。
-
代码应该做什么,你有没有分析过它对一些样本输入做了多少比较?
-
我认为
for (int i = 1;; i++)会导致死循环 -
@B001ᛦ 但这不一定是问题。还是有办法退出循环的。
-
@luk2302 这取决于 A 的内容...一般来说,对于公共方法来说,依靠输入的有效性来避免死循环是个坏主意。
标签: java collections java-8 java-stream