สมมติว่าเรามีรายการตัวเลข เราต้องหาความยาวของลำดับตัวเลขที่ยาวที่สุด เช่น เมื่อเราลบตัวเลขออกจากลำดับ แต่ละหมายเลขจะมีจำนวนครั้งเท่ากัน
ดังนั้น หากอินพุตเหมือนกับตัวเลข =[2, 4, 4, 7, 7, 6, 6] ผลลัพธ์จะเป็น 7
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
num_freq :=แผนที่ใหม่
-
freq_freq :=แผนที่ใหม่
-
diff_freq :=ชุดใหม่
-
ผลลัพธ์ :=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_freqs
-
ถ้าขนาดของ df_list เท่ากับ 1 แล้ว
-
ผลลัพธ์ :=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) แล้ว
-
ผลลัพธ์ :=i + 1
-
-
-
ส่งคืนผลลัพธ์
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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