给定长度为 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].
C语言
#include<stdio.h> int arrayPairSum(int *arr,int size){ int newarr[20001]={0},i = 0,count = 0,sum = 0,flag = 1; for(i=0;i<size;i++){ newarr[arr[i]+10000]++; } for(i=0;i<20001&&count<size/2;){ if(newarr[i]>0){ if(flag){ flag = 0; sum += i-10000; newarr[i]--; count++; }else{ flag =1; newarr[i]--; } }else{ i++; } } return sum; } int main(){ int arr[] ={1,4,3,2}; printf("%d\n",arrayPairSum(arr,4)); return 0; }
Java语言
import java.util.Arrays; /** * Created by jc6a on 2018/4/12. */ public class Solution { public int arrayPairSum(int arr[]){ Arrays.sort(arr); int sum = 0; for(int i=0;i<arr.length;i+=2){ sum+=arr[i]; } return sum; } public static void main(String[] args) { Solution solution = new Solution(); int arr[] = new int[]{1,4,3,2}; System.out.println(solution.arrayPairSum(arr)); } }