मान लीजिए हमारे पास एक ऐरे nums है, जिसमें अधिकतम 50 अद्वितीय मान हैं। हमारे पास quantity नामक एक और ऐरे है, जहां quantity[i] i-वें ग्राहक द्वारा ऑर्डर किए गए मानों की मात्रा को दर्शाता है। हमें जांचना है कि क्या nums को इस तरह वितरित करना संभव है कि:
- i-वां ग्राहक ठीक
quantity[i]आइटम प्राप्त करे, - i-वें ग्राहक को मिलने वाले मान सभी समान हों, और
- सभी ग्राहक संतुष्ट हों।
उदाहरण के लिए, यदि इनपुट nums = [5,1,2,2,3,4,4,3,3], quantity = [2,2,3] है, तो आउटपुट True होगा क्योंकि दो ग्राहक दो-दो एलिमेंट चाहते हैं, इसलिए वे [2,2] और [4,4] प्राप्त कर सकते हैं, और तीसरा तीन आइटम चाहता है, वे [3,3,3] प्राप्त कर सकते हैं, इसलिए सभी संतुष्ट हैं।
हल करने के चरण
util()फ़ंक्शन परिभाषित करें। यहi, cntrलेगा:- यदि
i == len(quantity), तोTrueवापस करें। temp_counter := cntrकी कॉपी बनाएंcntrमें प्रत्येकcntके लिए:- यदि
cnt >= quantity[i], तो:temp_counter[cnt] := temp_counter[cnt] - 1- यदि
temp_counter[cnt] == 0, तोtemp_counterसेcnt-वां एलिमेंट हटाएं rem := cnt - quantity[i]temp_counter[rem] := temp_counter[rem] + 1- यदि
util(i+1, temp_counter)True है, तोTrueवापस करें। temp_counter[rem] := temp_counter[rem] - 1- यदि
temp_counter[rem] == 0, तोtemp_counterसेrem-वां एलिमेंट हटाएं
temp_counter[cnt] := temp_counter[cnt] + 1
- यदि
Falseवापस करें।
- यदि
- मुख्य मेथड से, निम्नलिखित करें:
cnt :=numsमें मौजूद नंबरों की सभी फ्रीक्वेंसी की फ्रीक्वेंसी रखने वाला मैपquantityको रिवर्स ऑर्डर में सॉर्ट करेंutil(0, cnt)वापस करें।
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
from collections import Counter
def solve(nums, quantity):
def util(i, cntr):
if i == len(quantity):
return True
temp_counter = cntr.copy()
for cnt in cntr:
if cnt >= quantity[i]:
temp_counter[cnt] -= 1
if temp_counter[cnt] == 0:
temp_counter.pop(cnt)
rem = cnt - quantity[i]
temp_counter[rem] += 1
if util(i+1, temp_counter):
return True
temp_counter[rem] -= 1
if temp_counter[rem] == 0:
temp_counter.pop(rem)
temp_counter[cnt] += 1
return False
cnt = Counter(Counter(nums).values())
quantity.sort(reverse=True)
return util(0, cnt)
nums = [5,1,2,2,3,4,4,3,3]
quantity = [2,2,3]
print(solve(nums, quantity))
इनपुट
[5,1,2,2,3,4,4,3,3], [2,2,3]
आउटपुट
True