在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)仅是我们想要的对。

为了解决这个问题,我们将遵循以下步骤-

  • 对列表进行排序

  • N:= v [n-1]

  • 如果N mod 2与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
      猜你喜欢