我将尝试解决这个问题:
编写一个函数:
class Solution { public int solution(int[] A); }
给定一个由N个整数组成的数组A,返回未出现在A中的最小正整数(大于0)。
例如,给定A = [1, 3, 6, 4, 1, 2],函数应返回5。
假设: N 是一个整数,范围在[1..100,000]之间;数组A的每个元素都是一个整数,范围在[-1,000,000..1,000,000]之间。复杂度:预期的最坏时间复杂度为O(N);预期的最坏空间复杂度为O(N)(不计算输入参数所需的存储空间)。Given A = [1, 2, 3], the function should return 4. Given A = [−1, −3], the function should return 1.
我编写了以下解决方案,它的性能较差,但我无法找到错误。
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); }
这里提供分数,
我将继续调查,但如果您能看得更清楚,请告诉我。
Collections.sort()
,他的解决方案有效。 - XtremeBaumer