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