题目:给定一个无序数组arr,找到数组中未出现的最小正整数
示例:arr = [-1, 2, 3, 4]。返回1;arr = [1, 2, 3, 4]。返回5
[要求]:时间复杂度为,空间复杂度为
- 方法一
class Solution:
def minNumberdisappered(self , arr ):
# write code here
length = len(arr)
for i in range(length):
if arr[i]>= 1 and arr[i]<=length and arr[i] != arr[arr[i]-1]:
temp = arr[i]
arr[i] = arr[arr[i]-1]
arr[arr[i]-1] = temp
for i in range(length):
if arr[i] != i+1:
return(i+1)
return(length+1)
- 方法二:利用快排,时间复杂度为
class Solution():
def minNumberdisappered(self , arr ):
# write code here
if arr is not None:
length = len(arr)
solution = Solution()
solution.fastSort(arr, 0, length-1)
k = 1
for i in arr:
if i < k:
continue
elif i == k:
k += 1
else:
return k
return k
def fastSort(self, arr, left, right):
if left < right:
flag = arr[left]
i = left
j = right
while i < j:
while(i<j and arr[j]>flag):
j -= 1
if i<j:
arr[i] = arr[j]
i += 1
while(i<j and arr[i]<flag):
i += 1
if i<j:
arr[j] = arr[i]
j -= 1
arr[i] = flag
solution = Solution()
solution.fastSort(arr, left, i-1)
solution.fastSort(arr, i+1, right)
else:
return