LeetCode 561:アレイの分割IアレイパーティションI

公共の番号からのすべての記事:愛のバグを書きます

算法是一个程序的灵魂。
の配列を指定して、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).

注意:

  1. nが [1、10000]の範囲にある正の整数です。
  2. アレイ内のすべての整数は[-10000、10000]の範囲であろう。

ヒント:

  1. Nは範囲[1、10000]における正の整数です。
  2. 配列内の要素の範囲[-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つの簡単な勧告:

  • クイックソート(クイックソート) - O(nは\ログN)予想される時、O(n^{2})最悪の場合、大規模なため、乱数リストは、一般的に最速の並べ替えが知られると考えられている(C言語の標準ライブラリqsort()の並べ替えのためには、クイックソートアルゴリズム、再帰的な思考と分割統治です)
  • バケットソート(並び替えバケット) -はO(n)、必要とO(K)追加のスペース(時間の典型的な犠牲空間)

バブルソート、選択ソートは、市の複雑さを理解することは比較的単純で簡単ですn^2ので、それを繰り返すことはしません。

561_ArrayPartitionI_wiki

おすすめ

転載: www.cnblogs.com/zhangzhe532/p/11128567.html