描述
该题来自于力扣第41题
分析
没有出现的最小的正整数,按照暴力法就是先判断1
有没有在,没有则返回1
,有则继续判断2
,依次下去;但是有更好的方法,假设没有出现的最小正整数为n
,表示1~n-1
都在数组中,那么如果将k
放到数组的k-1
位置上,即arr[k-1]=k
,其中arr
为数组,数组的前n-1
个数就是1,2,...,n-1
,由于n
不在数组中,那么arr[n-1]
必不等于n
。那么求解过程应该是
1.
遍历到i
处,如果1<=arr[i]<=len(arr)
,表示arr[i]
应该放到arr[i]-1
这个位置上,但是首先判断arr[i]-1
是否已经是arr[i]
,如果是的话不进行操作,继续遍历下一个;如果不是则交换i
与arr[i]-1
位置上的两个数,继续遍历下一个;
2.
当遍历完整个数组后,第一个不满足arr[k-1]==k
的k
就是解了;如果都满足表示1~len(arr)
都在数组中,那么解就是len(arr)+1
。
代码
python
1 | class Solution: |