以下是一个示例代码,可以在不合并两个已排序数组的情况下获取前K个元素:
def get_top_k_elements(arr1, arr2, k):
n1, n2 = len(arr1), len(arr2)
i, j, count = 0, 0, 0
result = []
while i < n1 and j < n2:
if arr1[i] < arr2[j]:
result.append(arr1[i])
i += 1
else:
result.append(arr2[j])
j += 1
count += 1
if count == k:
break
# 如果其中一个数组已经遍历完,将另一个数组剩余元素添加到结果中
if i < n1:
result.extend(arr1[i:i+k-count])
elif j < n2:
result.extend(arr2[j:j+k-count])
return result
# 测试示例
arr1 = [1, 3, 5, 7, 9]
arr2 = [2, 4, 6, 8, 10]
k = 7
result = get_top_k_elements(arr1, arr2, k)
print(result) # 输出 [1, 2, 3, 4, 5, 6, 7]
以上代码首先定义了一个 get_top_k_elements
函数,接收两个已排序数组 arr1
和 arr2
,以及目标元素个数 k
。然后使用两个指针 i
和 j
分别指向两个数组的起始位置,通过比较两个指针所指的元素大小来决定将哪个元素添加到结果数组中。每次添加元素后,指针向后移动一位,计数器 count
也加一。当计数器 count
达到目标个数 k
时,结束循环。最后,如果其中一个数组已经遍历完,将另一个数组剩余的元素添加到结果中。最后返回结果数组。