สมมติว่าเรามีรายการตัวเลขชื่อ nums ถ้าความถี่ของตัวเลขที่พบบ่อยที่สุดใน nums คือ k เราต้องหาความยาวของสับลิสต์สั้นที่สุด ที่ความถี่ของสมาชิกที่พบบ่อยที่สุดในสับลิสต์นั้นก็เท่ากับ k ด้วย
เช่น ถ้าอินพุตคือ nums = [10, 20, 30, 40, 30, 10] ผลลัพธ์จะเป็น 3 เพราะตัวเลขที่พบบ่อยสุดคือ 10 และ 30 ที่นี่ k = 2 ถ้าเลือกสับลิสต์ [30, 40, 30] นี่คือสับลิสต์สั้นที่สุดที่ 30 ปรากฏและความถี่ก็เป็น 2
ขั้นตอนการแก้ปัญหา
L := ขนาดของ numsrnums := nums ย้อนกลับd := แมปความถี่ของแต่ละสมาชิกใน numsmx := ค่าสูงสุดของค่าใน dvs := รายการ k สำหรับแต่ละ k ใน d ถ้า d[k] == mxmn := L- สำหรับแต่ละ
vในvs:mn := min(mn, (L - rnums.index(v)) - nums.index(v))
- คืนค่า
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