【python-面试题53-循环排序】寻找缺失的数
问题描述:
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例 1:
输入: [0,1,3]
输出: 2
示例 2:
输入: [0,1,2,3,4,5,6,7,9]
输出: 8
循环排序思想:一般可用循环排序解决的问题是:数值一般在一个区间,且是要你在排好序/翻转过的数组中寻找丢失的/重复的/最小的元素。
例如:
a = [6,2,4,3,1,5] for k,v in enumerate(a): if a[k] != v-1: a[k],a[v-1] = a[v-1],a[k] print(a)
如果当前元素不是在其应该的位置上,则交换该元素和在其应该位置上的元素,一趟之后整个数组就是有序的了
接下来解决这一题:
class Solution: def missingNumber(self, nums: List[int]) -> int: for i,j in enumerate(nums): if i != j: return i return len(nums)
注意,可能返回的是最后一个元素。
结果: