LeetCode561-数组拆分I

1.思路:2n个元素,两两配对,要每组中的最小者累加和最小,那肯定不能让前n个最小的元素分散再每个组,不然每个组中的最小的值就是前n个最小元素之和了,不满足题意,所以应该尽量避免这种情况,怎样才能避免小元素落在了不同组呢,对于排序后的数组,只要将0号元素和1号元素放在一个组,那必然有一个组不包含前n个小元素,这样加起来肯定就大一些,同样的,将3和4号元素再放在一个组,又会出现一个组不包含小元素(排序后的前n个元素),sum又变大了,只要将前面的小元素全部以序放在一起,保证sum就是最小的。至于为啥要排序后依序两两分组,例如排序后元素如下:1,3,3,4,6,7,只能是(1,3)(3,4)(6,7)最小。
2.代码:
class Solution {
    public int arrayPairSum(int[] nums) {
        int sum = 0;
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i=i+2){
            sum += nums[i];
        }
        return sum;
    }
}
3.复杂度分析:复杂度主要就是快排的时间0(nlogn),空间(logn)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值