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

ค้นหาคู่จากอาร์เรย์ที่กำหนดโดยมีค่า nCr สูงสุดใน Python


สมมติว่าเรามีอาร์เรย์ arr ที่มีจำนวนเต็ม n เราต้องหา arr[i] และ arr[j] จากอาร์เรย์เพื่อให้ arr[i]Carr[j] มีขนาดใหญ่ที่สุด หากมีมากกว่าหนึ่งคู่ ให้คืนอันใดอันหนึ่ง

ดังนั้น หากอินพุตเป็นแบบ [4, 1, 2] เอาต์พุตจะเป็น 4 2 เนื่องจาก 4C1 =4, 4C2 =6 และ 2C1 =2 ดังนั้น (4,2) จึงเป็นคู่ที่เราต้องการเท่านั้น

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

  • เรียงลำดับรายการ v
  • N :=v[n - 1]
  • ถ้า N mod 2 เหมือนกับ 1 แล้ว
    • อันดับแรก :=N / 2 (การหารจำนวนเต็ม)
    • วินาที :=แรก + 1
    • ซ้าย :=-1, ขวา :=-1
    • อุณหภูมิ :=-1
    • สำหรับ i ในช่วง 0 ถึง n ให้ทำ
      • ถ้า v[i]> ก่อน แล้ว
        • อุณหภูมิ :=ฉัน
        • แตก
      • มิฉะนั้น
        • ความแตกต่าง :=แรก - v[i]
        • ถ้าต่างกัน
        • res1 :=ความแตกต่าง
        • ซ้าย :=v[i]
  • ขวา :=v[ชั่วคราว]
  • difference1 :=แรก - ซ้าย
  • difference2 :=ขวา - วินาที
  • ถ้าข้อแตกต่าง1 <แตกต่าง2 แล้ว
    • พิมพ์(N, ซ้าย)
  • มิฉะนั้น
    • พิมพ์(N, ขวา)
  • มิฉะนั้น
    • สูงสุด :=N / 2 (การหารจำนวนเต็ม)
    • res :=3*(10^18)
    • R :=-1
    • สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
      • ความแตกต่าง :=|v[i] - สูงสุด|
      • ถ้าความแตกต่าง
      • res :=ความแตกต่าง
      • R :=v[i]
  • พิมพ์ (N, R)
  • ตัวอย่าง

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

    def findMatrixPair(v, n):
       v.sort()
       N = v[n - 1]
       if N % 2 == 1:
          first = N // 2
          second = first + 1
          res1, res2 = 3 * (10 ** 18), 3 * (10 ** 18)
          left, right = -1, -1
          temp = -1
          for i in range(0, n):
             if v[i] > first:
                temp = i
                break
             else:
                difference = first - v[i]
                if difference < res1:
                   res1 = difference
                   left = v[i]
          right = v[temp]
          difference1 = first - left
          difference2 = right - second
          if difference1 < difference2:
             print(N, left)
          else:
             print(N, right)
       else:
          max = N // 2
          res = 3 * (10 ** 18)
          R = -1
          for i in range(0, n - 1):
             difference = abs(v[i] - max)
             if difference < res:
             res = difference
             R = v[i]
          print(N, R)
    v = [4,1,2]
    n = len(v)
    findMatrixPair(v, n)

    อินพุต

    [4,1,2], 3

    ผลลัพธ์:

    4 2