文章所有來自公衆號:愛寫bugjava
算法是一個程序的靈魂。 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.算法
給定長度爲 2n 的數組, 你的任務是將這些數分紅 n 對, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從1 到 n 的 min(ai, bi) 總和最大。數組
Example 1:函數
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:性能
提示:ui
其實就是把 數組排序,而後按順序 每兩個數既是一對,每對的第一個數累加之和即爲所求。就是考一下各種排序算法的性能。code
先使用內置 sort()
函數理解一下思路:blog
Java:排序
import java.util.Arrays; class Solution { public int arrayPairSum(int[] nums) { Arrays.sort(nums); int sum=0; for (int i=0;i<nums.length;i+=2){ sum+=nums[i]; } return sum; } }
擴展:遞歸
維基百科上對排序算法介紹的很是詳細,而且進行了歸類比較,地址: https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95
這裏簡單推薦兩個:
qsort()
排序用的就是快速排序算法,利用遞歸和分而治之思想)冒泡排序、選擇排序都是比較簡單容易理解,複雜度是 n^2
,因此再也不贅述。