LeetCode —— 561. Array Partition I [Simple] —— Análisis y código (Java)

LeetCode —— 561. Array Partition I [Array Partition I] [Simple] —— Análisis y código [Java]

1. Tema

Dada una matriz de números enteros con una longitud de 2n, su tarea es dividir estos números en n pares, como (a1, b1), (a2, b2),…, (an, bn) de modo que min (ai, bi ) tienen la mayor suma.
Devuelve la suma máxima.

Ejemplo 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

Ejemplo 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

inmediato:

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

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/array-partition-i Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Dos, análisis y código

1. Ordenar

(1) Pensando

De acuerdo con el significado de la pregunta, si desea obtener la suma máxima de los dos mínimos, debe hacer que los dos números del mismo grupo se acerquen lo más posible. Después de ordenar la matriz de pequeña a grande, se resuelve la suma de los elementos en posiciones de índice pares.

(2) Código

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) Resultados

Tiempo de ejecución: 13 ms, superando al 96,18% de los usuarios
en todas las presentaciones de Java ; consumo de memoria: 40,6 MB, superando al 32,90% de los usuarios en todas las presentaciones de Java.

Tres, otro

Nada.

Supongo que te gusta

Origin blog.csdn.net/zml66666/article/details/113873506
Recomendado
Clasificación