使用容器c++设计算法完成查找数组里面第k小元素的功能。数组里的第k小元素是指将数组从小到大排序后的第k个元素。
可以使用容器c++中的堆(heap)来实现查找数组中第k小元素的功能。堆是一种特殊的二叉树结构,具有以下性质:
-
堆中的每个节点的值都大于等于(或小于等于)其子节点的值。
-
堆中的根节点即为最大(或最小)元素。
通过使用堆,我们可以维护一个大小为k的最小堆,即堆中的元素是当前数组中前k小的元素。具体实现如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
int findKthSmallestElement(const std::vector<int>& nums, int k) {
std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
// 将数组的前k个元素插入最小堆
for (int i = 0; i < k; i++) {
minHeap.push(nums[i]);
}
// 遍历数组剩余的元素
for (int i = k; i < nums.size(); i++) {
// 如果当前元素比堆顶元素小,则将堆顶元素弹出,将当前元素插入堆中
if (nums[i] < minHeap.top()) {
minHeap.pop();
minHeap.push(nums[i]);
}
}
// 返回堆顶元素,即第k小元素
return minHeap.top();
}
int main() {
std::vector<int> nums = {4, 2, 7, 1, 5, 9};
int k = 3;
int kthSmallest = findKthSmallestElement(nums, k);
std::cout << "The " << k << "th smallest element is: " << kthSmallest << std::endl;
return 0;
}
在上述代码中,我们使用了一个最小堆(minHeap)来存储当前数组中前k小的元素。首先,我们将数组的前k个元素插入堆中。然后,从数组的第k+1个元素开始,遍历数组中剩余的元素。对于每个元素,如果它比堆顶元素小,则将堆顶元素弹出,将当前元素插入堆中。最后,返回堆顶元素,即为第k小的元素。
在示例代码中,数组[4, 2, 7, 1, 5, 9]中第3小的元素为4。因此,程序输出为"The 3rd smallest element is: 4"
原文地址: http://www.cveoy.top/t/topic/iUCj 著作权归作者所有。请勿转载和采集!