第二次遍历:找到第一个不在正确位置上的数,即为缺失的最小正整数。 for i in range(n): if nums[i] != i + 1: return i + 1 在这一步中,如果 nums[i] 不等于 i + 1,说明 i + 1 是缺失的最小正整数。 这样,通过两次遍历和原地交换的方式,就可以在常数级别的额外空间内找到未排序整数数组中...
elif nums[anchor] > 1: return 1 else: return nums[anchor] + 1 #anchor in the body else: while anchor < length: anchor += 1 if nums[anchor] - nums[anchor - 1] > 1: return nums[anchor - 1] + 1 break elif nums[anchor] - nums[anchor - 1] == 1 and anchor + 2 < length:...
System.out.println(1); }else{for(Integer integer : list) {//如果集合里存在一个数 它加一后的数不在集合里,那么这个数加一就是我们要找的最小正整数;//如果在集合里,那么就不是,继续遍历集合 找到需要的那个数if(!list.contains(integer+1)){ System.out.println(integer+1);break; } } } }...
以此类推,nums[i]应该在nums[nums[i]-1]的位置。
2021-07-12:缺失的第一个正数。给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。比如[3,4,5],输出1。比如[1,2,3,4,0],输出5。 福大大 答案2021-07-12: ...
nums[i]= 1;//使用索引和数字符号作为检查器//例如,如果 nums[1] 是负数表示在数组中出现了数字 `1`//如果 nums[2] 是正数 表示数字 2 没有出现for(inti = 0; i < n; i++) {inta =Math.abs(nums[i]);//如果发现了一个数字 a - 改变第 a 个元素的符号//注意重复元素只需操作一次if(a ...