step by step.
题目:
给你一个含
n
个整数的数组nums
,其中nums[i]
在区间[1, n]
内。请你找出所有在[1, n]
范围内但没有出现在nums
中的数字,并以数组的形式返回结果。示例 1:
输入:nums = [4,3,2,7,8,2,3,1] 输出:[5,6]示例 2:
输入:nums = [1,1] 输出:[2]
代码(hashset):
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> res = new ArrayList<Integer>();
int len = nums.length;
HashSet<Integer> hs = new HashSet<Integer>();
for(int i=0;i<len;i++)
{
hs.add(nums[i]);
}
for(int i=0;i<len;i++){
if(!hs.contains(i+1))
res.add(i+1);
}
return res;
}
}
错误代码:
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> list = new ArrayList<Integer>();
int len = nums.length;
Arrays.sort(nums);
if(nums[0]!=1) list.add(1);
int num=1;
for(int i=1;i<len;i++){
if(nums[i]!=num+1&&nums[i]!=nums[i-1]){
while(num!=nums[i]-1) list.add(++num);
num++;
}
num=nums[i];
}
if(nums[len-1]!=len) list.add(len);
num=len;
for(int i=len-2;i>=0;i--){
if(nums[i]!=num-1&&nums[i]!=nums[i+1]){
while(num!=nums[i]+1) list.add(--num);
num--;
}else break;
}
list.sort(Comparator.comparingInt(o->o));
return list;
}
}
错误结果(通过率24/34):
解答错误
24 / 34 个通过的测试用例
输入
nums =
[1,1,2,2]
添加到测试用例
输出
[4]
预期结果
[3,4]