मान लीजिए हमारे पास संख्याओं की एक सूची है। हमें संख्याओं के सबसे लंबे अनुक्रम की लंबाई ज्ञात करनी है जैसे कि जब हम अनुक्रम से एक संख्या हटाते हैं, तो प्रत्येक संख्या समान संख्या में होती है।
इसलिए, यदि इनपुट numbers = [2, 4, 4, 7, 7, 6, 6] है, तो आउटपुट 7 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
num_freq := एक नया मैप
freq_freq := एक नया मैप
diff_freq := एक नया सेट
result := 1
प्रत्येक इंडेक्स I और मान num के लिए nums में, करें:
cur_freq := num_freq[num]
num_freq[num] := num_freq[num] + 1
freq_freq[cur_freq] := freq_freq[cur_freq] - 1
freq_freq[cur_freq + 1] := freq_freq[cur_freq + 1] + 1
cur_freq + 1 को diff_freq में जोड़ें
यदि cur_freq diff_freq में है, और freq_freq[cur_freq] 0 के समान है, तो:
cur_freq को diff_freq से हटाएं
df_list := diff_freq के तत्वों को लेकर एक नई सूची
यदि df_list का आकार 1 के समान है, तो:
result := i + 1
अन्यथा जब df_list का आकार 2 के समान है, और (जब कोई भी [|freq_freq[df_list[0]] - freq_freq[df_list[1]]|, freq_freq[df_list[0]], freq_freq[df_list[1]]) 1 है), और (जब कोई भी [|df_list[0] - df_list[1]|, df_list[0], df_list[1]]) 1 है), तो:
result := i + 1
result वापस करें
उदाहरण
from collections import defaultdict
class Solution:
def solve(self, nums):
num_freq = defaultdict(int)
freq_freq = defaultdict(int)
diff_freq = set()
result = 1
for i, num in enumerate(nums):
cur_freq = num_freq[num]
num_freq[num] += 1
freq_freq[cur_freq] -= 1
freq_freq[cur_freq + 1] += 1
diff_freq.add(cur_freq + 1)
if cur_freq in diff_freq and freq_freq[cur_freq] == 0:
diff_freq.remove(cur_freq)
df_list = list(diff_freq)
if len(df_list) == 1:
result = i + 1
elif (
len(df_list) == 2
and any(
x == 1
for x in [
abs(freq_freq[df_list[0]] - freq_freq[df_list[1]]),
freq_freq[df_list[0]],
freq_freq[df_list[1]],
]
)
and any(x == 1 for x in [abs(df_list[0] - df_list[1]), df_list[0], df_list[1]])
):
result = i + 1
return result
ob = Solution()
print(ob.solve([2, 4, 4, 7, 7, 6, 6]))
इनपुट
numbers = [2, 4, 4, 7, 7, 6, 6]
आउटपुट
7