मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है। यदि nums में सबसे अधिक बारंबार संख्या की आवृत्ति k है। हमें सबसे छोटे सबलिस्ट की लंबाई ढूंढनी है जैसे कि उसके सबसे अधिक बारंबार आइटम की आवृत्ति भी k हो।
इसलिए, यदि इनपुट है nums = [10, 20, 30, 40, 30, 10], तो आउटपुट होगा 3, क्योंकि यहां सबसे अधिक बारंबार संख्याएं 10 और 30 हैं, यहां k = 2। यदि हम सबलिस्ट [30, 40, 30] चुनते हैं तो यह सबसे छोटा सबलिस्ट है जहां 30 मौजूद है और इसकी आवृत्ति भी 2 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
L := numsका आकारrnums := numsका रिवर्सd :=numsमें मौजूद प्रत्येक तत्व की आवृत्तियों वाला एक मैपmx := dके सभी मानों की सूची का अधिकतमvs :=प्रत्येकkके लिएkकी एक सूची यदिd[k]mxके समान हैmn := Lvsमें प्रत्येकvके लिए, करें:mn := min(mn, (L - (v का इंडेक्स rnums में) - (v का इंडेक्स nums में)))
mnलौटाएं
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
from collections import Counter
def solve(nums):
L = len(nums)
rnums = nums[::-1]
d = Counter(nums)
mx = max(d.values())
vs = [k for k in d if d[k] == mx]
mn = L
for v in vs:
mn = min(mn, (L - rnums.index(v)) - nums.index(v))
return mn
nums = [10, 20, 30, 40, 30, 10]
print(solve(nums))
इनपुट
[10, 20, 30, 40, 30, 10]
आउटपुट
3