问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3718 访问。

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

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

输出: 4

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

提示:

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


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.

Input: [1,4,3,2]

Output: 4

Explanation: n is 2, and the maximum sum of pairs is 4 = min(1, 2) + min(3, 4).

Note:

n is a positive integer, which is in the range of [1, 10000].
All the integers in the array will be in the range of [-10000, 10000].


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3718 访问。

public class Program {public static void Main(string[] args) {int[] nums = null;nums = new int[] { 1, 4, 3, 2 };var res = ArrayPairSum(nums);Console.WriteLine(res);Console.ReadKey();}private static int ArrayPairSum(int[] nums) {Array.Sort(nums);var sum = 0;for(int i = 0; i < nums.Length; i += 2) {sum += nums[i];}return sum;}}

以上给出1种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3718 访问。

4

分析:

LeetCode 并没有把这题打上贪心标签,我觉得是可以讨论的。我们要解的是所有子数组 min 之后的最大和,这是一种典型的需要贪心思想求解的题目,以局部最优解合并得出整体最优解,所以关键点在于贪心策略的选择。那么对于该题来说贪心策略显然为每个子数组中的2个数的差的绝对值在最小时,整个数组合并出的 min 值最大;否则,若2个数的差的绝对值过大,那么对于整个拆分过后的数组来说,损失了过多的值。也就是说,我们直接排序之后,取出奇(jī)数值相加即可。

显而易见,以上算法的时间复杂度基于 Array.Sort() 所采用的排序算法。

C#LeetCode刷题之#561-数组拆分 I(Array Partition I)相关推荐

  1. LeetCode刷题笔记2——数组2

    LeetCode刷题笔记2--数组2 重塑数组 题目 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原 ...

  2. LeetCode刷题(十)----数组-----medium部分(Java、C++)

    LeetCode刷题(十)-----数组-------medium部分(Java.C++) 238. 除自身以外数组的乘积 给定长度为n的整数数组nums,其中n>1,返回输出数组output, ...

  3. 【leetcode刷题】 64.数组的度——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...

  4. 为了更快的砍柴,每日磨刀:LeetCode刷题总结(数组篇)

    看完<资深技术Leader曹乐:如何成为技术大牛>这篇文章后,我把提升代码能力,放到了一个优先级比较高的位置.为什么是刷LeetCode而不是看开源代码?可能有几个方便的原因: 1 面试笔 ...

  5. C#LeetCode刷题-树状数组

    树状数组篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 493 翻转 ...

  6. Leetcode每日一题:561. 数组拆分 I

    目录 问题描述 思路分析及代码实现 问题描述 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), -, (an, bn) ,使得从 ...

  7. C#LeetCode刷题之#643-子数组最大平均数 I( Maximum Average Subarray I)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3728 访问. 给定 n 个整数,找出平均数最大且长度为 k 的连 ...

  8. LeetCode刷题:向数组中追加 K 个整数

    给你一个整数数组 nums 和一个整数 k .请你向 nums 中追加 k 个 未 出现在 nums 中的.互不相同 的 正 整数,并使结果数组的元素和 最小 . 返回追加到 nums 中的 k 个整 ...

  9. 尚育鹏:Leetcode刷题总结(数组)

    尚育鹏是华北电力大学数理系大二的学生,LSGO软件技术团队(Dreamtech算法组)成员,参加了多期Datawhale的组队学习. 希望参与我们线下组队学习的同学,可以在微信公众号后台回复 线下组队 ...

最新文章

  1. nginx+uWSGI+django+virtualenv+supervisor发布web服务器
  2. python中popen的用法_python中的subprocess.Popen()使用
  3. Windows 程序设计技巧
  4. 缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?
  5. Tomcat下中文乱码的解决方法
  6. php 执行shell命令的函数
  7. 将图片变换成3d对象
  8. allegro中10mil过孔_Allegro中增加过孔的方法
  9. 【0x40 数据结构进阶 例题】银河英雄传说【带权并查集】
  10. 邮件安全防护之反垃圾邮件开源软件ASSP
  11. 论文笔记:The Effectiveness of Data Augmentation in Image Classification using Deep Learning
  12. ecshop支付宝H5插件,ecshop手机版个人支付宝插件,ecshop手机端个人支付宝插件【支付宝免签接口,免签约扫码支付,免申请无须手续费,支付宝支付即时到账】
  13. element-ui表格的滚动条样式修改(当固定table表格高度时默认滚动条样式太丑)
  14. 尚德机构季报图解:净利达1.5亿 抗周期和盈利能力稳健
  15. ADP(自适应动态规划)-值迭代
  16. 诺基亚老年机信息中心设置路径
  17. PHP短信通知+语音播报自动双呼
  18. 用Adobe Reader PDF阅读器来验证电子签名有效性
  19. 什么是BioMed Central?
  20. css:图文效果(上面图片下面文字)

热门文章

  1. LeetCode 637. Average of Levels in Binary Tree
  2. Linux ls命令:查看目录下文件
  3. xCode 安装Mobile Device Framework出错的问题的解决方法
  4. 案例 解析频道节目单 c# 1614261055
  5. git-分支的冲突与冲突的解决
  6. django-orm查询功能词
  7. 单例测试phpunit
  8. jQuery Mobile中jQuery.mobile.changePage方法使用详解
  9. Google SketchUp 7——简单而不简单
  10. java 把文件转化为字节数组