最佳答案
我试图解决这个问题:
写一个函数:
class Solution { public int solution(int[] A); }
给定一个由 N 个整数组成的数组 A,返回最小的正数 不出现在 A 中的整数(大于0)。
例如,给定 A = [1,3,6,4,1,2] ,函数应该返回 5.
Given A = [1, 2, 3], the function should return 4. Given A = [−1, −3], the function should return 1.
假设:
N 是范围[1. .100,000]内的一个整数; 数组 A 的每个元素 是范围[-1,000,000. . 1,000,000]内的一个整数。复杂度:
期望最坏情况时间复杂度为 O (N) ; 期望最坏情况空间 复杂度为 O (N)(不包括输入所需的存储空间) 争论)。
我写了下面的解决方案,它给出了一个低性能,但是,我不能看到的错误。
public static int solution(int[] A) {
Set<Integer> set = new TreeSet<>();
for (int a : A) {
set.add(a);
}
int N = set.size();
int[] C = new int[N];
int index = 0;
for (int a : set) {
C[index++] = a;
}
for (int i = 0; i < N; i++) {
if (C[i] > 0 && C[i] <= N) {
C[i] = 0;
}
}
for (int i = 0; i < N; i++) {
if (C[i] != 0) {
return (i + 1);
}
}
return (N + 1);
}
这里提供了比分,
我会继续调查我自己,但如果你能看得更清楚,请告诉我。