1090 受標籤影響的最大值

2021-10-18 16:43:20 字數 1574 閱讀 8582

題目描述:

我們有乙個項的集合,其中第 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...