给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。输入第一行为数组,-1为结束标志,第二行为k值。输出第k大个元素。
时间: 2024-03-14 07:45:10 浏览: 72
好的,这是一个求第k大元素的问题。可以使用快速选择算法来解决。具体步骤如下:
1. 选取数组中的一个元素作为枢轴(pivot),并将数组分为两个部分,一部分是小于等于枢轴的元素,另一部分是大于枢轴的元素。
2. 如果大于枢轴的元素的数量小于k,则第k大元素一定在小于等于枢轴的元素中,于是在小于等于枢轴的元素中递归查找第k大元素。
3. 如果大于枢轴的元素的数量大于等于k,则第k大元素一定在大于枢轴的元素中,于是在大于枢轴的元素中递归查找第k大元素。
4. 递归结束的条件是数组只有一个元素。
下面是实现这个算法的Python代码:
```python
def find_kth_largest(nums, k):
pivot = nums[0]
left = [x for x in nums if x <= pivot]
right = [x for x in nums if x > pivot]
if len(right) == k - 1:
return pivot
elif len(right) > k - 1:
return find_kth_largest(right, k)
else:
return find_kth_largest(left, k - len(right))
# 示例
nums = []
while True:
num = int(input())
if num == -1:
break
nums.append(num)
k = int(input())
print(find_kth_largest(nums, k))
```
输入样例:
```
3
2
1
6
5
4
-1
2
```
输出样例:
```
5
```
阅读全文