题解 | #没有出现的编号#
没有出现的编号
https://www.nowcoder.com/practice/875d705df65c401a905f574070e09320
- 题目考察的知识点 : 数组排序
- 题目解答方法的文字分析:
- 将所有负数和零都过滤掉,只考虑正整数。然后,我们创建一个长度为n+1的数组bucket,对于数组中的每一个元素num,我们将其作为索引,将bucket[num]的值加一,表示num在数组中出现了一次。最后,我们从1开始遍历bucket数组,找到第一个值为0的位置,该位置的索引即为题目要求的最小正整数。如果bucket数组全都不为0,则答案为n+1。
- 对于最大负数的问题,我们只需要在遍历数组的时候,记录当前遍历到的最小的负数,并返回即可
- 本题解析所用的编程语言: Python
- 完整且正确的编程代码
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @return int整型一维数组
#
import sys
class Solution:
def findMissingAndMaxNegative(self, nums: List[int]) -> List[int]:
n = len(nums)
ret_num = self.find_max_negative(nums)
# 过滤掉负数和零
nums = [x for x in nums if x > 0]
# 如果nums为空,则最小未出现正整数为1
if not nums:
return [1, ret_num]
# 将nums中的元素放入桶中
bucket = [0] * (n + 1)
for num in nums:
if num <= n: # 只处理小于等于n的数字
bucket[num] += 1
# 找到第一个值为0的位置,该位置的索引即为最小未出现正整数
for i in range(1, n + 1):
if bucket[i] == 0:
return [i, ret_num]
# 如果桶数组全都不为0,则答案为n+1
return [n + 1, ret_num]
def find_max_negative(self, nums):
max_neg = -100000000
for num in nums:
if num < 0 and num > max_neg:
max_neg = num
return max_neg if max_neg != -100000000 else 0
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路

