在Python中的数组分割I

在Python中的数组分割I

我们给出一个数组arr[],里面有2n个整数。我们需要将整数元素分成成对的组合,例如(a1,b1),(a2,b2)….(an,bn),使得数组中所有元素的min(ai,bi)之和尽可能大。任务是找到最大的对数之和。例如arr[] = [1, 2, 3, 4],输出结果是4,最大的对数之和是4。所有可能的组合是

  • (1, 2)和(3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4.
  • (1, 4)和(2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3.
  • (1, 3)和(2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3.

最大的可能的对数之和是4。

在Python中,数组是一个可以存储单一类型的多个值的容器,可以使用索引值的引用来访问。需要注意的是,Python没有为数组提供内置的实现,而是提供了List的实现。在数组中,索引从0开始。例如,arr[0]是第一个元素,arr[1]是第二个元素,以此类推,直到n-1,arr[n-1]是最后一个元素。数组将元素存储在连续的内存分配中,arr在arr[]中是一个指针,它存储了第一个元素的内存。非常容易访问数组的所有元素。

在本教程中,第一种方法是对数组进行排序,然后通过一个for循环以2递增的方式遍历数组,然后将数组元素添加到res,最后返回res。第二种方法是对数组进行排序,然后声明一个列表res,通过一个for循环以2递增的方式遍历数组,然后将a[i]和a[i+1]添加到res,最后返回res中的最小值之和。第三种方法是对数组进行排序,声明变量count,从数组的一半开始循环,将a[n]和a[n+1]的较小值加到sum中,然后将count增加1,最后返回sum。

示例

输入 − arr[] = { 7, 8, 6, 9}

输出 − 最大和为:9

解释

将整数组合成(a1,b1),(a2,b2)….(an,bn),使得数组中所有元素的min(ai,bi)之和尽可能大。任务是找到最大的对数之和。在这个方法中,我们将对数组进行排序,并将数组初始化为0,然后通过一个FOR循环以2递增的方式遍历数组,将a[i]添加到变量res,最后返回res。最大的和为:9。

输入 −arr[] = { 4,9,4,5,9,7}

输出 −最大子数组的和为:18

解释 −我们给定了数组[4,9,4,5,9,7],其中有2n个整数。我们需要将整数成对(a1,b1),(a2,b2)…(an,bn)组成,使得数组中所有元素的min(ai,bi)的和尽可能大。任务是找到最大对的和。在这种方法中,我们将对数组进行排序,然后初始化列表“res”,然后通过FOR循环遍历数组,然后将arr[i]和arr[i+1]附加到“res”中,并返回“res”数组中的最小值的和。

以下程序使用的方法如下

  • 第一种方法
    • 输入数组元素

    • 打印数组。

    • 然后调用arrayPairSum(),将数组作为参数传递以打印出最大和。

    • 在arrayPairSum()内部。

    • 将变量res初始化为0。

    • 对数组进行排序。

    • 然后从0开始循环遍历到len(a)-1,步长为2。

    • 将a[i]添加到res中。

    • 然后返回res。

  • 第二种方法

    • 输入数组元素。

    • 打印数组。

    • 然后调用arrayPairSum(),将数组作为参数传递以打印出最大和。

    • 在arrayPairSum()内部。

    • 对数组进行排序。

    • 初始化列表res。

    • 从0开始循环遍历到len(a)-1,步长为2。

    • 将a[i]和a[i+1]的对添加到res中。

    • 然后返回res列表中的min(r)的和。

  • 第三种方法

    • 输入数组元素。

    • 打印数组。

    • 然后通过将数组作为参数调用arrayPairSum()来打印最大和。

    • 在arrayPairSum()内部

    • 对数组进行排序。

    • 然后将变量l初始化为len(a)。

    • 将变量sum,n和count初始化为0。

    • 然后开始循环,直到count小于l。

    • 然后将a[n]和a[n+1]中的较小值相加。

    • 然后将n增加2。

    • 然后将count增加1。

    • 最后返回sum。

示例1

class Solution(object):
   def arrayPairSum(self, a):
      res = 0
      a = sorted(a)
      for i in range(0,len(a)-1,2):
         res += a[i]
      return res
ob1 = Solution()
arr = [90,23,76,21,38]
print("The array is:",arr)
print("The maximum sum is:",ob1.arrayPairSum(arr))

输出

如果我们运行以上代码,将会生成以下输出:

The array is: 90,23,76,21,38
The maximum sum is: 59

示例2

class Solution(object):
   def arrayPairSum(self, a):
      a = sorted(a)
      res = []
      for i in range(0, len(a), 2):
         res.append((a[i], a[i+1]))
      return sum([min(r) for r in res])
ob1 = Solution()
arr = [17,18,16,19]
print("The array is:",arr)
print("The maximum sum is:",ob1.arrayPairSum(arr))

输出

如果我们运行上面的代码,将会产生以下输出结果 –

The array is: 17,18,16,19
The maximum sum is: 34

示例3

class Solution(object):
   def arrayPairSum(self, a):
      a = sorted(a)
      l = len(a)
      sum = 0
      n = 0
      count = 0
      while count < l/2:
         sum += min(a[n], a[n + 1])
         n += 2
         count += 1
      return sum
ob1 = Solution()
arr = [41,93,43,56,79,87]
print("The array is:",arr)
print("The maximum sum is:",ob1.arrayPairSum(arr))

输出

如果我们运行上述代码,将生成以下输出 –

The array is: 41 93 43 56 79 87
The maximum sum is: 184

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程