Closed 。这个问题需要多问focused /help/closed-questions 。目前不接受答案。
我正在尝试解决 codility MissingInteger 问题link https://codility.com/c/intro/demoZKF8W2-4TC :
写一个函数:
class Solution { public int solution(int[] A); }
给定一个包含 N 个整数的非空零索引数组 A,返回 A 中未出现的最小正整数。
例如,给定:
A[0] = 1
A[1] = 3
A[2] = 6
A[3] = 4
A[4] = 1
A[5] = 2
该函数应返回 5。
假使,假设:
N是[1..100,000]范围内的整数;
数组 A 的每个元素都是 [−2,147,483,648..2,147,483,647] 范围内的整数。
复杂:
预计最坏情况时间复杂度为 O(N);
预期最坏情况的空间复杂度为 O(N),超出输入存储(不计算输入参数所需的存储)。
可以修改输入数组的元素。
我的解决方案是:
class Solution {
TreeMap<Integer,Object> all = new TreeMap<Integer,Object>();
public int solution(int[] A) {
for(int i=0; i<A.length; i++)
all.put(i+1,new Object());
for(int i=0; i<A.length; i++)
if(all.containsKey(A[i]))
all.remove(A[i]);
Iterator notOccur = all.keySet().iterator();
if(notOccur.hasNext())
return (int)notOccur.next();
return 1;
}
}
测试结果为:
谁能解释一下为什么我得到这两个错误的答案? 尤其是第一个,如果数组中只有一个元素,唯一正确的答案不应该是1吗?
这是我的回答,得到了100/100 https://app.codility.com/demo/results/demoDEX92K-GJJ/ .
import java.util.HashSet;
class Solution {
public int solution(int[] A) {
int num = 1;
HashSet<Integer> hset = new HashSet<Integer>();
for (int i = 0 ; i < A.length; i++) {
hset.add(A[i]);
}
while (hset.contains(num)) {
num++;
}
return num;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)