📅  最后修改于: 2023-12-03 15:26:24.696000             🧑  作者: Mango
给定一个长度为 n 的整数数组,求最大的 K,满足数组中至少有 K 个元素的值不小于 K。
例如,对于数组 [1, 2, 3, 4, 5, 6, 7, 8, 9],最大的 K 是 5。因为数组中有 5 个元素的值不小于 5,分别是 5,6,7,8,9。
解法的核心是将数组中的元素按照大小排序,然后从大到小枚举 K 的可能取值,对于每个可能的 K,统计数组中有多少个元素的值大于或等于 K,直到找到第一个满足题目要求的 K。时间复杂度为 O(n log n)。
代码片段:
def max_k(nums):
nums.sort(reverse=True) # 从大到小排序
n = len(nums)
for k in range(1, n+1):
if nums[k-1] < k: # 前 k 个元素已经不满足条件
return k-1
return n # 数组本身满足条件
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(max_k(nums)) # 5
代码的核心是从大到小排序,然后用一个循环枚举可能的 K。当排序后的前 k 个元素中有元素的值小于 k 时,这些元素和后面的所有元素都无法满足条件,因此返回 k-1。如果整个数组都满足条件,就返回 n。
本题的解法比较简单,但需要注意时间复杂度。可以采用从大到小排序的方式来实现。对于排序算法,时间复杂度为 O(n log n)。对于每个可能的 K,需要遍历整个数组,时间复杂度为 O(n)。
整体的时间复杂度为 O(n log n),可以满足本题要求。