题目:
给定一个无序整型数组arr,找到数组中未出现的最小正整数。要求时间复杂度为O(N)空间复杂度为O(1)。
例如:
arr=[-1,2,3,4]。返回1。
arr=[1,2,3,4]。返回5。
=========================================================
分析:首先确定要找到的数字。是形如这样的数字:比如 [1,2,3,5,6,7 ] , 那么要找到的就是4.
也就是对数组中的正整数排序后,数组中第一个下标和值不相等的位置, 就是要找的数字。
解法1:
一个直观的时间复杂度,空间复杂度为O(n)的解法如下:
class Solution:
def get_num(self, list1):
l = len(list1)
new_list = [0]*(l+2) //开辟一个新的数组
for i in list1:
if i > 0 and i <=l: //对于数字大于数组长度的数字,忽略之。否则,填充新数组中对应的位置
//若数组中皆是大数,则未出现的正整数自然是1.
new_list[i] = i
print new_list
//在新数组中找到对应的位置。
for i in range(0, len(new_list)):
print i
if i != new_list[i]:
return i
if __name__ == '__main__':
sol = Solution()
list1 = [1,2,3,4]
print sol.get_num(list1)