Computer >> Máy Tính >  >> Lập trình >> Python

Tìm một cặp từ mảng đã cho với giá trị nCr lớn nhất bằng Python

Giả sử chúng ta có một mảng arr với n số nguyên, chúng ta phải tìm arr [i] và arr [j] từ mảng sao cho arr [i] Carr [j] lớn nhất có thể. Nếu có nhiều hơn một cặp, hãy trả lại bất kỳ cặp nào trong số chúng.

Vì vậy, nếu đầu vào là [4, 1, 2], thì đầu ra sẽ là 4 2 là 4C1 =4, 4C2 =6 và 2C1 =2, vì vậy (4,2) chỉ là cặp như chúng ta muốn.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • sắp xếp danh sách v
  • N:=v [n - 1]
  • nếu N mod 2 giống với 1, thì
    • đầu tiên:=N / 2 (phép chia số nguyên)
    • thứ hai:=first + 1
    • trái:=-1, phải:=-1
    • tạm thời:=-1
    • đối với tôi trong phạm vi từ 0 đến n, thực hiện
      • if v [i]> trước, sau đó
        • tạm thời:=i
        • break
      • nếu không,
        • khác biệt:=first - v [i]
        • nếu khác biệt
        • res1:=khác biệt
        • trái:=v [i]
  • đúng:=v [temp]
  • difference1:=first - left
  • difference2:=right - second
  • nếu khác biệt1
  • in (N, trái)
  • nếu không,
    • in (N, phải)
  • nếu không,
    • max:=N / 2 (phép chia số nguyên)
    • res:=3 * (10 ^ 18)
    • R:=-1
    • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
      • chênh lệch:=| v [i] - max |
      • nếu chênh lệch
      • res:=khác biệt
      • R:=v [i]
  • in (N, R)
  • Ví dụ

    Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    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)

    Đầu vào

    [4,1,2], 3

    Đầu ra:

    4 2