Python贪心算法:1、数组拆分

本文介绍了Python贪心算法在解决数组拆分问题中的应用,目标是找到数组中两两配对的最大总和。通过排序和选取相邻元素,可以实现这一目标。文章提供了两种实现方式,一种是升序排序后选取偶数下标元素,另一种是降序排序后选取奇数下标元素。总结规律表明,间隔选取求和能有效提高总和。
摘要由CSDN通过智能技术生成

Python贪心算法:1、数组拆分

算法思路难度:☆
编程实现难度:☆

题目描述

在这里插入图片描述

思路

1、要求的是最大总和,那么应该让求和的每一个数都尽可能的大。

即让min(a, b)尽可能的大,也就是要让(a,b)中最小的那个数尽可能的大。

2、(a, b)中所有的数都来自于给定的列表中,每个数只能用一次。

这就要求我们要减少浪费,(a, b)组合中较小的那个数会保留,而另一个数则会被抛弃,也就造成了浪费。我们要少浪费大一点的数,从而产生更大的和。这样就需要在做到第一点的基础上让|a - b|尽可能的小。

基于以上两点思考,我们首先需要排序,并且选取相邻的两个数作为一组,这样保证|a - b|尽可能的小。
以示例一为例:nums_sorted_reversed = [4, 3, 2, 1]。这样再来观察一下,上述两个思考点同时得到了满足,分成两个组(4, 3)和(2, 1),这两个组的总和为3+1=4。
总结规律:间隔选取求和,如升序排序选取偶数下标元素求和,如降序排序选取奇数下标元素求和。

代码

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        return sum(sorted(nums)[::2]) # 升序排序
class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        return sum(sorted(nums)[-2::-2]) # 降序排序
class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort(reverse=True)
        return sum(nums[1::2]) # 好理解一点的降序排序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值