在下面的代碼中,儘管它適用於較小長度的向量,我有一個數組的數組。我必須將最大數字加到價格上,然後將該數字減1。再次查找最大數字等等。我必須重複這個過程k次。 有比時間複雜度較低的優先級隊列更好的數據結構嗎?在C++中改進優先級隊列中的時間複雜度
下面是使用代碼矢量排序:
struct mclass {
public: bool operator()(int x, int y) {
return (x > y);
}
}
compare;
long priceCalculate(vector <int> a, long k) {
long price = 0;
sort(a.begin(), a.end(), compare);
while (--k >= 0) {
if (a[0] > 0) {
price = price + a[0];
a[0] = a[0] - 1;
sort(a.begin(), a.end(), compare);
}
}
return price;
}
而這也是大輸入長度給予暫停。
你究竟想要做什麼? – NathanOliver
我真的不明白你的代碼在做什麼。你有這堆元素,你取出頂部,將它添加到'價格',減少它,並重新插入到隊列中,並重復這個'k-1'次。對於'a',你有沒有關於'k'在一般情況下有多大的想法?如果'k'和'a'一樣大,你可以對矢量進行排序並避免使用優先級隊列(因爲彈出n個元素總是需要O(n log n)時間)。 – Bakuriu
用代碼邏輯編輯問題。 – hmims