Python 中的数组划分 I
我们给定数组,假设是 [1,2,3,4] 的 arr[]。我们必须将整数元素分组对齐,如 (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 没有提供数组的内置功能,而是提供列表的实现。数组中的索引从 0 开始。例如,arr[0] 是第一个元素,arr[1] 是第二个元素,以此类推,直到 n-1,arr[n-1] 是最后一个元素。数组将元素存储在连续的内存分配中,而 arr[] 中的 arr 是存储第一个元素的内存指针。访问数组的所有元素非常容易。
在本教程中,在第一种方法中,我们会对数组进行排序,然后通过一个增量为 2 的 for 循环遍历该数组,接着将数组元素添加到 res 中,最后返回 res。在第二种方法中,对数组进行排序并声明列表 res,然后通过一个增量为 2 的 for 循环遍历该数组,接着追加 a[i] 和 a[i+1],最后返回 res 数组中最小值的和。在第三种方法中,对数组进行排序并声明变量 count,然后开始循环,同时将 count 一直增加到数组的一半,接着将 a[n] 和 a[n+1] 的最小值添加到 sum,最后将 count 增加 1,并返回 sum。
示例
输入 − arr[] = { 7, 8, 6, 9}
输出 − 最大和为:9
说明 − 我们得到了包含 2n 个整数的数组 [7, 8, 6, 9]。我们必须组成一对对的整数,如 (a1,b1)、(a2,b2)....(an,bn),使得数组中所有元素的 min(ai,bi) 的和尽可能大。任务是找到成对的最大和。在这种方法中,我们会对数组进行排序,并用 0 初始化该数组,然后再通过一个增量为 2 的 FOR 循环遍历该数组,接着将 a[i] 添加到变量 res 中,最后返回 res。最大和为:9。
输入 − arr[] = { 4,9,4,5,9,7}
输出 − 最大子数组和为:18
说明 − 我们得到了包含 2n 个整数的数组 [ 4,9,4,5,9,7]。我们必须组成一对对的整数,如 (a1,b1)、(a2,b2)....(an,bn),使得数组中所有元素的 min(ai,bi) 的和尽可能大。任务是找到成对的最大和。在这种方法中,我们会对数组进行排序,然后初始化列表 res,接着通过 FOR 循环遍历数组,然后追加 arr[i] 和 arr[i+1],并返回 res 数组中最小值的和。
以下程序中使用的方案如下:
第一种方法
输入数组元素
打印数组。
然后,通过将数组作为参数传递给 arrayPairSum(),调用该函数以打印最大和。
在 arrayPairSum() 内部。
用 0 初始化变量 res。
对数组进行排序。
然后,从 0 开始到小于 len(a)-1,以增量 2 开始一个 FOR 循环。
然后将 a[i] 添加到 res 中。
然后返回 res。
第二种方法
输入数组元素。
打印数组。
然后,通过将数组作为参数传递给 arrayPairSum(),调用该函数以打印最大和。
在 arrayPairSum() 内部。
对数组进行排序。
初始化列表 res。
从 0 开始到小于 len(a),以增量 2 开始一个 FOR 循环。
将 a[i] 和 a[i+1] 的对追加到 res 中。
然后,从 res 列表返回 min(r) 的和。
第三种方法
输入数组元素。
打印数组。
然后,通过将数组作为参数传递给 arrayPairSum(),调用该函数以打印最大和。
在 arrayPairSum() 内部。
对数组进行排序。
然后,用 len(a) 初始化变量 l。
用 0 初始化变量 sum、n 和 count。
然后开始循环 WHILE count
然后添加 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