📅  最后修改于: 2023-12-03 14:48:57.917000             🧑  作者: Mango
给定一个整数数组 arr
,找到每个元素的一个整数 K
,使得该元素的前 K
个元素中至少有 K
个大于等于 K
。
我们可以使用二分查找的方法来找到满足条件的 K
。对于每个元素 num
,我们可以考虑从 1
到 n
的所有可能的 K
。其中 n
是数组的长度。在每次猜测 K
后,我们可以统计数组中前 K
个元素中大于等于 K
的个数。如果该个数足够,那么我们可以继续尝试更大的 K
值。否则,需要尝试更小的 K
值。
def find_K(arr):
n = len(arr)
result = []
for num in arr:
left, right = 0, n
while left < right:
mid = left + (right - left) // 2
count = sum(x >= mid for x in arr[:mid])
if count >= mid:
left = mid + 1
else:
right = mid
result.append(left - 1)
return result
arr = [1, 2, 3, 4, 5]
print(find_K(arr))
# 输出: [0, 2, 3, 4, 5]
arr = [3, 2, 2, 2, 3]
print(find_K(arr))
# 输出: [2, 3, 3, 4, 4]
注意: 上面的代码示例中,为了简化,我们使用了 Python 的列表推导式来计算大于等于 K
的个数。实际上,可以使用任何合适的方法来计算该个数。