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
相关推荐
小小怪750几秒前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
Ulyanov7 分钟前
基于PyVista的雷达导引头波束三维动态仿真与可视化:从原理到实现的完整指南
python·pyvista·雷达电子战仿真
User_芊芊君子13 分钟前
2026最新Python+AI入门指南:从零基础到实战落地,避开90%新手坑
开发语言·人工智能·python
im_AMBER16 分钟前
Leetcode 141 最长公共前缀 | 罗马数字转整数
算法·leetcode
2501_9454235417 分钟前
数据分析与科学计算
jvm·数据库·python
InfiniSynapse26 分钟前
连上Snowflake就能取数:InfiniSynapse + Spider2-Snow实战企业数据分析
数据结构·图像处理·人工智能·算法·语言模型·数据挖掘·数据分析
阿贵---30 分钟前
实战:用Python开发一个简单的区块链
jvm·数据库·python
今儿敲了吗35 分钟前
python基础学习笔记第三章
笔记·python·学习
yosh'joy!!38 分钟前
Python
python
阿钱真强道43 分钟前
18 Python 关联分析:Apriori 算法——如何从购物小票里找到高频组合
python·apriori·关联规则·频繁项集挖掘·购物篮分析