package y2019.Algorithm.array;

/**
* @ProjectName: cutter-point
* @Package: y2019.Algorithm.array
* @ClassName: ArrayPairSum
* @Author: xiaof
* @Description: 561. 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.
*
* 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).
*
* 给定一个长度为2n(偶数)的数组,分成n个小组,返回每组中较小值的和sum,使sum尽量大
* @Date: 2019/7/2 17:24
* @Version: 1.0
*/
public class ArrayPairSum { public int solution(int[] nums) {
//这个题的求每组中小的值,最后求和,尽量大,那就是说相近的数据最好放一组,不然差距很大,会导致最后值相差很大
quikSort(nums, 0, nums.length);
//排完序之后,叉开获取数据和即可
int result = 0;
for(int i = 0; i < nums.length; i += 2) {
result += nums[i];
}
return result;
} private void quikSort(int[] array, int left, int right) {
if(left < right) {
int mid = partitionSort(array, left, right);
quikSort(array, left, mid);
quikSort(array, mid + 1, right);
}
} private int partitionSort(int[] array, int left, int right) {
// if(left == right || left > right) {
// return left;
// } int midValue = array[left];
int start = left;
int end = right; //分区排序
do { do { ++ start; } while(start < right && array[start] < midValue); do {
--end;
} while(left < end && array[end] > midValue); //交换
if(start < end) {
int temp = array[start];
array[start] = array[end];
array[end] = temp;
} } while(start < end); //交换完毕之后,最后吧坑填上,这个时候left和right错开一位,所以right再left的左边
array[left] = array[end];
array[end] = midValue; return end;
} public static void main(String args[]) {
int A1[] = {1,4,3,2};
ArrayPairSum fuc = new ArrayPairSum();
System.out.println(fuc.solution(A1));
} }

最新文章

  1. T-SQL学习记录
  2. linux系统内核流转浅析
  3. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)
  4. RequiredFieldValidator 根据group组来触发验证
  5. spring MVC的困惑--url-pattern的/和/*有区别
  6. MVC 自定义异常错误页面处理
  7. Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的
  8. Epic - Tic Tac Toe
  9. oracle存储过程实例
  10. js switch表达式的例子
  11. IE6 png 透明 (三种解决方法)(转来的哦)
  12. HDU-1879-继续畅通工程(并查集)
  13. express框架介绍
  14. Android应用的内存管理
  15. Python积累三:object() take no object!
  16. C# 计算代码运行时间
  17. 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
  18. 【BZOJ4916】神犇和蒟蒻 解题报告
  19. 最大子数组之和(N)
  20. 使用awk分割字符串并且获取分割后的最后一个字符串

热门文章

  1. telegraf 学习二 几个概念
  2. Bacteria(优先队列)
  3. mysql 通配符%以及_
  4. Android中LayoutInflater()方法
  5. tar加密码
  6. easyui 如何为datagrid添加自定义列属性(如:width,align,editor)
  7. JDBC Request :Cannot load JDBC driver class &#39;com.mysql.jdbc.Driver&#39;解决办法
  8. vue的mixin简化开发
  9. EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解
  10. [LeetCode] 190. Reverse Bits 翻转二进制位