LeetCode561 数组拆分 I

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

示例 1:

输入: [1,4,3,2]

输出: 4
解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).

提示:

  1. n 是正整数,范围在 [1, 10000].
  2. 数组中的元素范围在 [-10000, 10000].

//章节 - 数组和字符串
//四、双指针技巧
//2.数组拆分 I
/*
算法思想:
    首先要正确理解题意,这道题让我们分割数组,两两一对,让每对中较小的数的和最大。这题难度不大,用贪婪算法就可以了。由于我们要最大化每对中的较小值之和,那么肯定是每对中两个数字大小越接近越好,因为如果差距过大,而我们只取较小的数字,那么大数字就浪费掉了。明白了这一点,我们只需要给数组排个序,然后按顺序的每两个就是一对,我们取出每对中的第一个数即为较小值累加起来即可。
*/
//算法实现:
class Solution {
public:
    int arrayPairSum(vector<int>& nums) {
        int res = 0, n = nums.size();
        sort(nums.begin(), nums.end());
        for (int i = 0; i < n; i += 2) {
            res += nums[i];
        }
        return res;
    }
};

原文地址:https://www.cnblogs.com/parzulpan/p/10061369.html

时间: 2024-10-06 00:53:34

LeetCode561 数组拆分 I的相关文章

[Swift]LeetCode561. 数组拆分 I | Array Partition I

Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possible. Example 1: Input: [1,4,3,2] Output: 4 Explan

数组拆分

温习并学习下算法,记录设计地点滴. 数组拆分是将一个无序数组,拆分成两个子数组,子数组A地元素全部比数组元素小,子数组B地元素全部比数组元素大. 代码如下: package test; import java.util.Arrays; public class PartitionPolicy { public void part(int[] array, int key) { // swap int temp = array[key]; array[key] = array[array.leng

java数组拆分多个子数组

这里做个java集合/数组拆分多个子集合/数组的两种实现方式的笔记. 方式 一: /**  * 拆分集合  * @param datas  * @param splitSize  * @param <T>  * @return  */ private <T> List<List<T>> spliceArrays(List<T> datas, int splitSize) {     if (datas == null || splitSize &

将数组拆分为字符串

//将数组拆分为字符串 $attr=$db->Query($sql); $str=""; foreach($attr as $v) { $str =$str. implode("^",$v); $str = $str."|"; } $str = substr($str,0,strlen($str)-1); echo $str; //将字符串拼接为数组 var hang = data.split("|"); for(var

Leetcode#561. Array Partition I(数组拆分 I)

题目描述 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大. 示例 1: 输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4). 提示: n 是正整数,范围在 [1, 10000]. 数组中的元素范围在 [-10000, 10000]. 思路 分组之后min(ai, bi)的和最大

Leetcode 561.数组拆分I

数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大. 示例 1: 输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4). 提示: n 是正整数,范围在 [1, 10000]. 数组中的元素范围在 [-10000, 10000]. 思路 这道题目给了我们一个数组有2n i

*hiho 1475 - 数组拆分,dp,由N^2降到NlogN

题目链接 描述 小Ho得到了一个数组作为他的新年礼物,他非常喜欢这个数组! 在仔细研究了几天之后,小Ho成功的将这个数组拆成了若干段,并且每段的和都不为0! 现在小Ho希望知道,这样的拆分方法一共有多少种? 两种拆分方法被视作不同,当且仅当数组断开的所有位置组成的集合不同. 输入 每组输入的第一行为一个正整数N,表示这个数组的长度 第二行为N个整数A1~AN,描述小Ho收到的这个数组 对于40%的数据,满足1<=N<=10 对于100%的数据,满足1<=N<=105, |Ai|&l

[Swift]LeetCode842. 将数组拆分成斐波那契序列 | Split Array into Fibonacci Sequence

Given a string S of digits, such as S = "123456579", we can split it into a Fibonacci-like sequence [123, 456, 579]. Formally, a Fibonacci-like sequence is a list F of non-negative integers such that: 0 <= F[i] <= 2^31 - 1, (that is, each

数组拆分为新数组

package com.classes;//已知数组a,将奇数位置元素存到b数组中,偶数位置元素存到c数组中public class Shuzu1118_4 { public static void main(String[] args) { int [] a={3,6,9,1,4,7,2,5,8}; int [] b; //定义数组b int [] c; //定义数组c//先找出数组b和数组从的长度 if(a.length%2==0){ b=new int[a.length/2]; c= ne