在Python中查詢給定陣列中nCr值最大的配對
假設我們有一個包含n個整數的陣列arr,我們必須從陣列中找到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相同,則
- first := N / 2(整數除法)
- second := first + 1
- left := -1, right := -1
- temp := -1
- 對於範圍為0到n的i,執行以下操作:
- 如果v[i] > first,則
- temp := i
- 中斷
- 否則,
- difference := first - v[i]
- 如果difference < res1,則
- res1 := difference
- left := v[i]
- 如果v[i] > first,則
- right := v[temp]
- difference1 := first - left
- difference2 := right - second
- 如果difference1 < difference2,則
- 列印(N, left)
- 否則,
- 列印(N, right)
- 否則,
- max := N / 2(整數除法)
- res := 3*(10^18)
- R := -1
- 對於範圍為0到n - 1的i,執行以下操作:
- difference := |v[i] - max|
- 如果difference < res且不為零,則
- res := difference
- 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
廣告