📌  相关文章
📜  最大值 K 使得数组至少有 K 个 >= K 的元素(1)

📅  最后修改于: 2023-12-03 15:26:24.696000             🧑  作者: Mango

最大值 K 使得数组至少有 K 个 >= K 的元素

给定一个长度为 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),可以满足本题要求。