代码拉取完成,页面将自动刷新
#define PARENT(i) i/2
#define LEFT(i) 2*i
#define RIGHT(i) 2*i+1
class Solution {
public:
void MaxHeapify(vector<int>& A, int i) {
int heapSize = A[0];
int l = LEFT(i), r = RIGHT(i);
int largest;
if (l <= heapSize && A[l] > A[i])
largest = l;
else largest = i;
if (r <= heapSize && A[r] > A[largest])
largest = r;
if (largest != i) {
swap<int>(A[i], A[largest]);
MaxHeapify(A, largest);
}
}
// 通过自底向上的方法嫁给你一个大小为 A[0]+1 的A数组转换为最大堆
// 数组的有效长度为A[0], 有效数据由A[1]~A[1+A[0]]
void BuildMaxHeap(vector<int>& A) {
for (int i = A[0] / 2; i > 0; i--)
MaxHeapify(A, i);
}
int minStoneSum(vector<int>& piles, int k) {
int len = piles.size();
piles.push_back(len);
swap(piles[0], piles[len]);
len++;
BuildMaxHeap(piles);
for (int i = 0; i < k; i++) {
piles[1] -= piles[1] / 2;
MaxHeapify(piles, 1);
}
int ret = 0;
for (int i = 1; i < len; i++) {
ret += piles[i];
};
return ret;
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。