LeetCode——561。配列パーティションI [シンプル]-分析とコード(Java)

LeetCode——561。アレイパーティションI [アレイパーティションI] [シンプル]-分析とコード[Java]

1.トピック

長さが2nの整数配列numsが与えられた場合、タスクはこれらの数値を(a1、b1)、(a2、b2)、…、(an、bn)などのnペアに分割して、min(ai、bi )合計が最大です。
最大合計を返します。

例1:

输入:nums = [1,4,3,2]
输出:4
解释:所有可能的分法(忽略元素顺序)为:
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
所以最大总和为 4

例2:

输入:nums = [6,2,6,5,1,2]
输出:9
解释:最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9

促す:

  • 1 <= n <= 10 ^ 4
  • nums.length == 2 * n
  • -10 ^ 4 <= nums [i] <= 10 ^ 4

出典:LeetCode
リンク:https://leetcode-cn.com/problems/array-partition-i
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

2、分析とコード

1.並べ替え

(1)考える

質問の意味によると、2つの最小値の最大合計を取得する場合は、同じグループ内の2つの数値をできるだけ近づける必要があります。配列を小さいものから大きいものにソートした後、偶数のインデックス位置にある要素の合計が解決されます。

(2)コード

class Solution {
    
    
    public int arrayPairSum(int[] nums) {
    
    
        int n = nums.length, ans = 0;
        Arrays.sort(nums);
        for (int i = 0; i < n; i += 2)
            ans += nums[i];
        return ans;
    }
}

(3)結果

実行時間:13ミリ秒、
すべてのJava送信ユーザーの96.18%を上回っています。メモリ消費量:40.6 MB、すべてのJava送信でユーザーの32.90%を上回っています。

3、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/113873506