📅  最后修改于: 2023-12-03 15:28:48.388000             🧑  作者: Mango
这是一道关于算法的问题。题目要求实现一个函数,输入一个整数数组和一个整数k,输出根据以下规则求解的新数组:
输入:[1, 2, 3, 4, 5]
, 3
输出:[-1, -1, 1, 2, 3]
解释:
为了满足题目要求,我们可以采用一个优先队列(堆)来保存前面第k个最小值。每次加入一个新的数时,将其放入堆中,并弹出堆中最小的数。当堆中元素个数小于k时,将-1放入新数组中。除此之外,我们还需要维护一个哈希表,记录下标对应的数是否已经在堆中了,以避免出现重复的数。
以下是Python实现:
from queue import PriorityQueue
def find_kth_min(nums, k):
n = len(nums)
ans = [-1] * n
q = PriorityQueue()
pos = {}
for i in range(n):
while q.qsize() > 0 and nums[q.queue[0]] < nums[i]:
pos.pop(q.get())
if len(pos) < k-1:
ans[i] = -1
elif i-k not in pos:
q.put(i-k)
pos[i-k] = True
q.put(i)
pos[i] = True
ans[i] = nums[q.queue[0]]
return ans
本题考察了堆和哈希表的应用,以及对算法的理解能力。