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]