題目描述:
我們有乙個項的集合,其中第 i 項的值為 values[i],標籤為 labels[i]。
我們從這些項中選出乙個子集 s,這樣一來:
|s| <= num_wanted
對於任意的標籤 l,子集 s 中標籤為 l 的項的數目總滿足 <= use_limit。
返回子集 s 的最大可能的 和。
示例 1:
輸入:values = [5,4,3,2,1], labels = [1,1,2,2,3], num_wanted = 3, use_limit = 1
輸出:9
解釋:選出的子集是第一項,第三項和第五項。
示例 2:
輸入:values = [5,4,3,2,1], labels = [1,3,3,3,2], num_wanted = 3, use_limit = 2
輸出:12
解釋:選出的子集是第一項,第二項和第三項。
示例 3:
輸入:values = [9,8,8,7,6], labels = [0,0,0,1,1], num_wanted = 3, use_limit = 1
輸出:16
解釋:選出的子集是第一項和第四項。
示例 4:
輸入:values = [9,8,8,7,6], labels = [0,0,0,1,1], num_wanted = 3, use_limit = 2
輸出:24
解釋:選出的子集是第一項,第二項和第四項。
1 <= values.length == labels.length <= 20000
0 <= values[i], labels[i] <= 20000
1 <= num_wanted, use_limit <= values.length
方法1:
(1)貪心;
(2)盡量使用最大value值,故先對該值進行降序排序,為了對映到對應的lables,需要帶上索引進行排序;
(3)遍歷排序後的value值,同時加上約束,同一種的lables不能超過use_limit,且總共只需找到 num_wanter個;
class
solution
sort
(mp.
begin()
,mp.
end(),
(pair<
int,
int>
&lhs,pair<
int,
int>
&rhs));
unordered_map<
int,
int> counts;
//統計使用過的受影響的lable的數量,用於約束use_limit的判斷
int res=0;
for(
int i=
0;isize()
;++i)}}
return res;}}
;
Leetcode 1090 受標籤影響的最大值
我們有乙個項的集合,其中第 i 項的值為 values i 標籤為 labels i 我們從這些項中選出乙個子集 s,這樣一來 s num wanted 對於任意的標籤 l,子集 s 中標籤為 l 的項的數目總滿足 use limit。返回子集 s 的最大可能的 和。示例 1 輸入 values 5...
滑動視窗的最大值 佇列的最大值
請定義乙個佇列並實現函式max得到佇列裡的最大值,要求函式max push back和 pop front的時間複雜度都是o 1 在佇列中維護乙個儲存最大值的佇列,當pop和push操作的同時也對最大值佇列進行維護。當彈出的時佇列中的最大值時,也彈出最大值佇列的頭,當壓入新值時,對最大值佇列從後向前...
最大值的選取
如果問題中各資料的範圍明確,那麼無窮大的設定不是問題,在不明確的情況下,很多程式設計師都取0x7fffffff作為無窮大,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇,但是在更多的情況下,0x7ff...