📅  最后修改于: 2023-12-03 14:56:54.190000             🧑  作者: Mango
对于一个正整数数组,我们可以将其排序后,找到最大的数。但是,如果我们需要找到最大的正整数,而且这个正整数在数组中不存在,那么该怎么办呢?这就是我们今天要解决的问题——给定数组中不存在的最大N的正整数。
第一种解决方法比较直接,我们可以遍历数组,找到不存在的最大正整数。具体实现可以参考以下代码段:
def getMaxN(arr):
# 先将数组排序
arr.sort()
# 初始值设为1
i = 1
for num in arr:
# 如果num小于等于0或者等于当前的i,直接跳过
if num <= 0 or num == i:
continue
# 如果num大于当前的i,说明当前的i是缺失的最小正整数,直接返回即可
else:
return i
# 如果数组中的元素都小于等于0或者等于当前的i,说明缺失的是最大正整数,返回i+1即可
return i+1
以上代码实现了对数组的排序,以及对排序后的数组进行遍历。如果遍历到0或者当前的i,直接跳过;如果遍历到大于当前的i的数,那么说明当前的i是缺失的最小正整数,直接返回即可。
第二种解决方法是利用桶排序的思想,将每个数字放到对应的桶中,然后查找缺失的最小正整数。具体实现可以参考以下代码段:
def getMaxN(arr):
# 找到数组中的最大值
max_num = max(arr)
# 初始化桶,长度应该为max_num
bucket = [0] * (max_num+1)
# 统计每个数字出现的次数
for num in arr:
if num <= 0:
continue
# 将数字放到对应的桶中
bucket[num] += 1
# 查找最小的缺失正整数
for i in range(1, max_num+2):
if bucket[i] == 0:
return i
以上代码实现了将数字放到对应的桶中,然后查找最小的缺失正整数。需要注意的是,桶的长度应该为数组中的最大值。
两种方法都可以找到给定数组中不存在的最大N的正整数,但是方法一需要对数组进行排序,时间复杂度为O(nlogn);方法二可以不用排序,时间复杂度为O(n),但是需要额外的空间来存放桶。具体选择哪种方法,可以根据实际情况进行选择。