#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> #include <queue> using namespace std; class Solution { public: long long maxKelements(int* nums, int n, int k) { priority_queue<int> pq; /* 元素放入最大堆中 */ for (int i = 0; i < n;i++) { pq.push(nums[i]); } long long ans = 0; /* 取出最大元素, 并对最大元素进行处理 */ while (k--) { int val = pq.top(); ans += val; pq.pop(); pq.push((val + 2) / 3); } return ans; } }; 算法复杂度是什么
时间: 2024-02-14 14:08:20 浏览: 69
duojikongzhi.rar_Unsigned_c++include <reg51>
这段代码实现了一个找出数组中最大的k个元素,并对这些元素进行一定处理后求和的功能。算法的时间复杂度为O(nlogn),其中n为数组的长度。具体来说,将n个元素依次插入最大堆中,堆的插入操作的时间复杂度为O(logn)。然后取出最大的k个元素,每次取出操作的时间复杂度为O(logn),共进行了k次。在取出元素后,对元素进行处理并重新插入堆中,每次操作的时间复杂度也为O(logn),共进行了k次。因此,总的时间复杂度为O(nlogn)。
阅读全文