मान लीजिए कि हमारे पास वस्तुओं का एक सेट है:i-वें आइटम में मूल्य मान हैं [i] और लेबल लेबल [i]। फिर, हम इन मदों का एक उपसमुच्चय S लेंगे, जैसे कि -
- |एस| <=num_wanted
- प्रत्येक लेबल L के लिए, लेबल L के साथ S में मौजूद वस्तुओं की संख्या <=use_limit है।
हमें उपसमुच्चय S का अधिकतम संभव योग ज्ञात करना है।
उदाहरण के लिए, यदि इनपुट मानों की तरह है =[5,4,3,2,1] और लेबल [1,1,2,2,3] हैं, num_wanted =3, use_limit =1, तो आउटपुट 9 होगा . ऐसा इसलिए है क्योंकि पहले, तीसरे और पांचवें आइटम में चुना गया सबसेट।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक सरणी v बनाएं
- मैं के लिए 0 से लेकर मानों की लंबाई तक
- v में [मान[i], लेबल[i]] डालें
- v सरणी को क्रमबद्ध करें
- उत्तर:=0, उपयोग करें:=खाली नक्शा, और मैं :=0
- जबकि num_wanted और i
- अगर v[i, 1] उपयोग के नक्शे में मौजूद नहीं है
- num_wanted को 1 से कम करें
- उत्तर:=उत्तर + वी[i, 0]
- उपयोग[v[i, 1]] :=1
- अन्यथा उपयोग करें[v[i, 1]]
- num_wanted को 1 से कम करें
- उत्तर:=उत्तर + वी[i, 0]
- उपयोग बढ़ाएं[v[i, 1]] 1 तक
- अगर v[i, 1] उपयोग के नक्शे में मौजूद नहीं है
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def largestValsFromLabels(self, values, labels, num_wanted, use_limit): v = [] for i in range(len(values)): v.append([values[i],labels[i]]) v = sorted(v,key = lambda v:v[0],reverse=True) ans = 0 use = {} i = 0 while num_wanted and i < len(v): if v[i][1] not in use: num_wanted -=1 ans+=v[i][0] use[v[i][1]] = 1 elif use[v[i][1]]<use_limit: num_wanted -=1 ans+=v[i][0] use[v[i][1]]+=1 i+=1 return ans ob = Solution() print(ob.largestValsFromLabels([5,4,3,2,1],[1,1,2,2,3],3,1))
इनपुट
[5,4,3,2,1] [1,1,2,2,3] 3 1
आउटपुट
9