Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาความยาวของรายการย่อยที่สั้นที่สุดพร้อมองค์ประกอบความถี่สูงสุดที่มีความถี่เท่ากันใน Python


สมมติว่าเรามีรายการหมายเลขที่เรียกว่า 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