在 Python 中从给定数组中查找具有最大 nCr 值的一对
pythonserver side programmingprogramming更新于 2025/10/16 8:12:17
假设我们有一个包含 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,执行
- 如果 v[i] > 第一,则
- temp := i
- break
- 否则,
- 差异 := 第一 - v[i]
- 如果差异 < res1,则
- res1 := 差异
- 左 := v[i]
- 如果 v[i] > 第一,则
- 右 := v[temp]
- 差异1 := 第一 - 左
- 差异2 := 右 - 第二
- 如果差异1 < difference2,则
- print(N, left)
- 否则,
- print(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]
- print(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
Output:
4 2
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

