力扣561.数组拆分(Java语言贪心思想)

题目描述:

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

返回该 最大总和 。
力扣561.数组拆分(Java语言贪心思想)_第1张图片

解题思路及代码:

1.我们易得为了使最终结果最大,则我们要让每个分组尽可能的大即我们可以想到贪心思想
2.由于每个分组有涉及到取出分组中的最小值作为分组的结果即我们应改让数组中较大的数与较大的数、较小的数与较小的数分到一组(要避免将较大的数与较小的数分到一组)
3.定义一个变量max用于记录最终的结果,然后对数组进行排序,循环遍历、每次前进两个单位,每次将当前数组索引位置的值加到max上(在此操作下每次遍历到的数都为分组中的较小值)

代码:

class Solution {
    //Tiem complexity: O(NlogN)
    //Space Complexity: (1)
    public int arrayPairSum(int[] nums) {
        Arrays.sort(nums);
        int max = 0;
        for(int i = 0; i < nums.length; i+=2) {
            max += nums[i];
        }
        return max;
    }
}

你可能感兴趣的:(力扣题目,leetcode,算法,数据结构)