Findallmissingnumbersinarrays题目描述:给你一个包含n个整数的数组nums,其中nums[i]在区间[1,n]内。请找出[1,n]范围内但不在nums范围内的所有数字,并将结果以数组的形式返回。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:Hash法首先将1到n的数初始化到hashSet中,然后判断原数组nums的元素是否在hashSset中,然后去掉,最后剩下的在[1的范围内,n]但不是nums中出现的数字。方案二:原地算法首先遍历原数组,将对应位置的元素对应的索引位置的值标记为负数,最后再次遍历数组,挑出非负数在[1,n]范围内但没有出现在nums中的数字util.stream.Collectors;publicclassLeetCode_448{/***哈希方法**@paramnums原始数组*@return*/publicstaticListfindDisappearedNumbers(int[]nums){Setnumbers=newHashSet<>();//set1~n初始化hashSet中的数字for(inti=1;i<=nums.length;i++){numbers.add(i);}//如果原数组nums的元素在hashSset中,则将其移除并留下下面是[1,n]范围内但不在nums中的数字for(intnum:nums){if(numbers.contains(num)){numbers.remove(num);}}返回新的ArrayList<>(numbers);}/***就地算法**@paramnums原始数组*@return*/publicstaticListfindDisappearedNumbers2(int[]nums){//遍历原数组,将对应位置的元素对应的索引位置的值标记为负数for(inti=0;iresult=newArrayList<>();中挑出[1,n]范围内但不在Numbers范围内的非负数对于(inti=0;i0){result.add(i+1);}}返回结果;}publicstaticvoidmain(String[]args){int[]nums={4,3,2,7,8,2,3,1};//测试用例,预期输出:5,6System.out.println(findDisappearedNumbers(nums).stream().map(e->String.valueOf(e)).collect(Collectors.joining(",")));System.out.println(findDisappearedNumbers2(nums).stream().map(e->String.valueOf(e)).collect(Collectors.joining(",")));}}【每日留言】做人的价值在于“实”,做事最要的是“专”,学最要的是“恒”