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]
- if v [i]> trước, sau đó
- đúng:=v [temp]
- difference1:=first - left
- difference2:=right - second
- nếu khác biệt1
- in (N, trái)
- in (N, phải)
- 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]
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