ধরুন আমাদের কাছে আইটেমের একটি সেট আছে:i-th আইটেমের মান আছে [i] এবং লেবেল লেবেল[i]। তারপর, আমরা এই আইটেমগুলির একটি উপসেট S নেব, যেমন −
- |এস| <=সংখ্যা_ওয়ান্টেড
- প্রতিটি লেবেল 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, ব্যবহার করুন :=খালি মানচিত্র, এবং i :=0
- যখন num_wanted এবং i
এর দৈর্ঘ্য - যদি v[i, 1] ব্যবহার মানচিত্রে উপস্থিত না থাকে
- সংখ্যা 1 দ্বারা কমিয়ে দিন
- উত্তর :=উত্তর + v[i, 0]
- ব্যবহার করুন[v[i, 1]] :=1
- অন্য ব্যবহার[v[i, 1]]
- সংখ্যা 1 দ্বারা কমিয়ে দিন
- উত্তর :=উত্তর + v[i, 0]
- 1 দ্বারা ব্যবহার [v[i, 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