561. 数组拆分 递归思想 数学规律 python 力扣

561. 数组拆分

已解答

简单

相关标签

相关企业

提示

给定长度为 2n的整数数组 nums ,你的任务是将这些数分成 n对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1nmin(ai, bi) 总和最大。

返回该 最大总和

示例 1:

复制代码
输入:nums = [1,4,3,2]
输出:4
解释:所有可能的分法(忽略元素顺序)为:
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
所以最大总和为 4

示例 2:

复制代码
输入:nums = [6,2,6,5,1,2]
输出:9
解释:最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9

提示:

  • 1 <= n <= 104
  • nums.length == 2 * n
  • -104 <= nums[i] <= 104

题解:

刚刚看到这个题有点懵逼,自己写了几个例子观察后发现这个是排序后然后取每对元素左边的一个元素,如何相加。这里简要证明一下:如nums = [1,4,3,2],如果我们想舍去一个元素让剩下的元素最大,我们舍弃谁呢?当然是1.如果舍弃一对数的话,我们可以舍弃[1,2]吗?显然是不能的,因为题意取的是一对数里面最小的元素,而1,2已经是最小的数。用递归的思想来解释,我们为了把1舍弃就必须找一个元素给他'陪葬',这个元素最好是比1大一点点的那个数,这样才能保持剩余的元素最大。

参考代码如下:

复制代码
class Solution(object):
    def arrayPairSum(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums=sorted(nums)
        ans=0
        for i in range(len(nums)):
            if i%2==0:
                ans+=nums[i]
        return ans
相关推荐
剑锋所指,所向披靡!5 分钟前
数据结构之线性表
数据结构·算法
ZhengEnCi6 分钟前
P1B-Python环境配置基础完全指南-Windows系统安装与验证
python
m0_7166670729 分钟前
NumPy入门:高性能科学计算的基础
jvm·数据库·python
带娃的IT创业者1 小时前
Weclaw 请求路由实战:一个 request_id 如何在 800 个并发连接中精准找到目标浏览器?
python·websocket·fastapi·架构设计·实时通信·openclaw·weclaw
2401_844221322 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_672703312 小时前
上机练习第49天
数据结构·算法
样例过了就是过了2 小时前
LeetCode热题100 N 皇后
数据结构·c++·算法·leetcode·dfs·深度优先遍历
霖大侠2 小时前
CPAL: Cross-Prompting Adapter With LoRAs forRGB+X Semantic Segmentation
人工智能·深度学习·算法·机器学习·transformer
近津薪荼3 小时前
优选算法——分治(2):快速选择
算法
Z...........3 小时前
(优选算法)斐波那契数列模型
数据结构·算法