• LeetCode561. 数组拆分


    项目场景:

    乍一看这题,心都凉了一半。。。结果发现,这题所有的难度应该都点在阅读理解上了


    问题描述

    1. 数组拆分
      给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(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


    原因分析:

    思路:这道题有点田忌赛马的影子,这道题的关键就是谁与谁组队相比较的问题,
    由于求最大的值,所以我们要尽可能的保留大的值,
    假如按照最大+最小,第二大+第二小,就会直接把最大和第二大的数舍去了,
    如果最大与第二大组队就可以保留第二大的数字,
    以此类推,我们只需要排序之后,相邻之间组队就可以留下最大的值

    其实就是把从a1到an数组下标为奇数的数都加起来


    解决方案:

    class Solution {
        public static int arrayPairSum(int[] nums) {
            int sum=0;
            Arrays.sort(nums);
            for(int i=0;i< nums.length;i=i+2){
                sum=sum+nums[i];
            }
            return sum;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    mulesoft Module 5 quiz 解析
    记一次任意文件下载到Getshell
    【苏大c++第二次考试模拟】
    2022 CLion 中的Cygwin 配置(最全,最良心版)
    使用vba调用vb.net封装的dll,出现453错误
    js 中的 map集合使用。
    档案馆:如何做到水浸事件及时预警?
    IDEA启动项目报错:Error running ‘‘: Command line is too long.
    ubuntu20 install ros
    置换环建笛卡尔树:AT_wtf22Day1B
  • 原文地址:https://blog.csdn.net/weixin_43798721/article/details/126518550