我正在尝试解决密码问题MissingInteger问题链接:
写一个函数:
Run Code Online (Sandbox Code Playgroud)class Solution { public int solution(int[] A); }如果给定N个整数的非空零索引数组A,则返回A中不出现的最小正整数.例如,给定:
Run Code Online (Sandbox Code Playgroud)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;
}
}
Run Code Online (Sandbox Code Playgroud)
测试结果如下:

谁能解释我为什么我得到这两个错误的答案?特别是第一个,如果数组中只有一个元素,那么唯一正确的答案不应该是1吗?
java ×1