在Python中从给定数组中找到最大nCr值的一对
假设我们有一个具有n个整数的数组arr,我们必须从数组中找到arr[i]和arr[j],以便arr[i]Carr[j]尽可能大。如果一对以上,则退回其中任何一对。
因此,如果输入类似于[4,1,2],则输出将为42,因为4C1=4、4C2=6和2C1=2,因此(4,2)仅是我们想要的对。
为了解决这个问题,我们将遵循以下步骤-
对列表进行排序
N:=v[n-1]
如果Nmod2与1相同,则
打印(N,右)
打印(N,左)
如果v[i]>首先,则
除此以外,
温度:=我
打破
res1:=差异
左:=v[i]
差异:=第一-v[i]
如果差异<res1,则
第一:=N/2(整数除法)
第二:=第一+1
左:=-1,右:=-1
温度:=-1
对于0到n范围内的i,执行
正确的:=v[temp]
差异1:=第一-左
差异2:=右-秒
如果差异1<差异2,则
除此以外,
除此以外,
差异:=|v[i]-最大|
如果差<res不为零,则
res:=差异
R:=v[i]
最大:=N/2(整数除法)
res:=3*(10^18)
R:=-1
对于介于0到n-1的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