公共の番号からのすべての記事:愛のバグを書きます
算法是一个程序的灵魂。
の配列を指定して、2nの整数、あなたのタスクは、グループにこれらの整数であるにn個の整数のペア、と言う(A1、B1)、(A2、B2)、···、(BN)は全てのiできるだけ大きく1からnまで分間(AI、BI)の和になります。
所与の長さ2nのアレイは、あなたのタスクは、これらの数に分割され、N個のそのような(A1、B1)、などの対、(A2 、B2)、···、(BN)、 その結果、1〜n個分( AI、BI)の最大の合計。
例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).
注意:
- nが [1、10000]の範囲にある正の整数です。
- アレイ内のすべての整数は[-10000、10000]の範囲であろう。
ヒント:
- Nは範囲[1、10000]における正の整数です。
- 配列内の要素の範囲[-10000、10000]。
問題解決のアイデア:
実際には、アレイがソートされ、その後、順次2つの数の各々は、一対の両方である、最初の数及び累積和の各対は、所望されます。ソートアルゴリズムの様々なタイプのパフォーマンスをテストしようとしています。
まず、組み込みの使用sort()
いくつかのアイデアを理解するために機能を:
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;
}
}
拡張:
ソートアルゴリズムのWikiの百科事典は、非常に詳細に記載し、比較アドレスに分類される:https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97 %E6%以下のB3%95
ここでは2つの簡単な勧告:
- クイックソート(クイックソート) - 予想される時、最悪の場合、大規模なため、乱数リストは、一般的に最速の並べ替えが知られると考えられている(C言語の標準ライブラリ
qsort()
の並べ替えのためには、クイックソートアルゴリズム、再帰的な思考と分割統治です) - バケットソート(並び替えバケット) -は、必要と追加のスペース(時間の典型的な犠牲空間)
バブルソート、選択ソートは、市の複雑さを理解することは比較的単純で簡単ですn^2
ので、それを繰り返すことはしません。