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

ค้นหาจำนวนซ้ำสูงสุดในเวลา O(n) และ O(1) ช่องว่างพิเศษใน Python


สมมติว่าเรามีอาร์เรย์ขนาด n หากองค์ประกอบในอาร์เรย์อยู่ในช่วงตั้งแต่ 0 ถึง k-1 โดยที่ k แสดงเป็นจำนวนเต็มบวกและ k <=n เราต้องหาจำนวนซ้ำสูงสุดในอาร์เรย์นี้

ดังนั้น หากอินพุตเป็น k =8 และ A =[3, 4, 4, 6, 4, 5, 2, 8] ผลลัพธ์จะเป็น 4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของ A

  • สำหรับผมอยู่ในช่วง 0 ถึง n ทำ

    • A[A[i] mod k] :=A[A[i] mod k] + k

  • max_val :=A[0]

  • ผลลัพธ์ :=0

  • สำหรับผมอยู่ในช่วง 1 ถึง n ทำ

    • ถ้า A[i]> max_val แล้ว

      • max_val :=A[i]

      • ผลลัพธ์ :=i

  • ส่งคืนผลลัพธ์

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def get_max_repeating(A, k):
   n = len(A)
   for i in range(n):
      A[A[i]%k] += k
   max_val = A[0]
   result = 0
   for i in range(1, n):
      if A[i] > max_val:
         max_val = A[i]
         result = i
   return result
A = [3, 4, 4, 6, 4, 5, 2, 8]
k = 8
print(get_max_repeating(A, k))

อินพุต

[3, 4, 4, 6, 4, 5, 2, 8], 8

ผลลัพธ์

4