Tabla de contenido
El valor mínimo de la suma del par más grande en una matriz
Suma máxima de K elementos
Se le proporciona una matriz de números enteros indexados desde 0nums
y un número entero k
. Debe hacer lo siguiente exactamente k
veces para maximizar su puntaje:
nums
Seleccione un elemento de élm
.- Elimina los elementos seleccionados
m
de la matriz. - Agregue nuevos elementos
m + 1
a la matriz. - Tu puntuación aumenta
m
.
Devuelva k
la puntuación máxima después de realizar las operaciones anteriores exactamente veces.
Ejemplo 1:
Entrada: nums = [1,2,3,4,5], k = 3 Salida: 18 Explicación: Necesitamos seleccionar exactamente 3 elementos de nums y maximizar la puntuación. Seleccione 5 por primera vez. La suma es 5, nums = [1,2,3,4,6]. Seleccione 6 por segunda vez. La suma es 6, nums = [1,2,3,4,7]. Elige 7 por tercera vez. La suma es 5 + 6 + 7 = 18, nums = [1,2,3,4,8]. Así que devolvemos 18. 18 es la mayor respuesta que se puede obtener.
Ejemplo 2:
Entrada: nums = [5,5,5], k = 2 Salida: 11 Explicación: Necesitamos seleccionar exactamente 2 elementos de nums y maximizar la puntuación. Seleccione 5 por primera vez. La suma es 5, nums = [5,5,6]. Seleccione 6 por segunda vez. La suma es 6, nums = [5,5,7]. Así que devolvemos 11. 11 es la máxima respuesta que se puede obtener.
pista:
1 <= nums.length <= 100
1 <= nums[i] <= 100
1 <= k <= 100
tren de pensamiento
Siento que es demasiado esotérico.
De hecho, es muy simple, le da una matriz, es posible que no esté ordenada.
Entonces, tienes que ordenar, por supuesto, no necesitas ordenar, después de todo, es solo una pregunta simple.
Situación 1: no alinee
el bucle for directo de una sola capa, encuentre el más grande y no necesite ninguna matriz, solo acumule directamente, agregue 1 al máximo cada vez que agregue el máximo a la suma y realice tales operaciones tantas veces como k es , y finalmente devuelve sum. La complejidad temporal del caso 1 es O(n).
Caso 2:
Después de clasificar, ¿no es el más grande? Luego le das el mayor (suma) en la matriz ordenada, y luego lo eliminas o no, no lo escuches, solo agrega 1 al mayor original, por lo que sigue siendo el mayor. Sea lo que sea k, puedes tomarlo tantas veces como quieras, y luego agregar 1 y devolverlo. La complejidad temporal del caso 2 es O(nlogn).
el código
import java.util.Arrays;
public class k个元素的最大和 {
public static void main(String[] args) {
int k=3;
int nums[]={1,2,3,4,5};
k个元素的最大和 kg = new k个元素的最大和();
System.out.println(kg.maximizeSum(nums,k));
}
public int maximizeSum(int nums[],int k){
int sum=0;
//排序版:
// Arrays.sort(nums);
// for (int i = 0; i < k; i++) {
// sum+=nums[nums.length-1];
// nums[nums.length-1]+=1;
// }
//未排序版:
int max=Returnmax(nums);
for (int i = 0; i < k; i++) {
sum+=max;
max+=1;
}
return sum;
}
//找最大
public int Returnmax(int nums[]){
int max=nums[0];
for (int i = 1; i < nums.length; i++) {
if (max<nums[i]){
max=nums[i];
}
}
return max;
}
}
El valor mínimo de la suma del par más grande en una matriz
La suma(a,b)
de pares de un par es igual a . La suma de pares más grande es la suma de pares más grande en una matriz de pares .a + b
- Por ejemplo, si tenemos pares
(1,5)
,(2,3)
y(4,4)
, la suma del par más grande esmax(1+5, 2+3, 4+4) = max(6, 5, 8) = 8
.
Dada una matriz de longitud uniforme , divida los elementos en pares de manera que:n
nums
nums
n / 2
nums
Cada elemento de está en exactamente un par, y- La suma del par más grande tiene el valor más pequeño .
Devuelva la suma de pares de números más pequeña y más grande según el esquema de división de pares de números óptimo .
Ejemplo 1:
Entrada: nums = [3,5,2,3] Salida: 7 Explicación: Los elementos de la matriz se pueden dividir en pares (3,3) y (5,2). La suma máxima del par es max(3+3, 5+2) = max(6, 7) = 7.
Ejemplo 2:
Entrada: nums = [3,5,4,2,4,6] Salida: 8 Explicación: Los elementos de la matriz se pueden dividir en pares (3,5), (4,4) y (6,2). La suma máxima del par es max(3+5, 4+4, 6+2) = max(8, 8, 8) = 8 .
pista:
n == nums.length
2 <= n <= 105
n
es un número par .1 <= nums[i] <= 105
explicar
La dificultad de esta pregunta es media, pero no creo que lo sea, puede ser que la codicia sea relativamente simple.
En primer lugar, sabemos que la longitud de la matriz nums[] es par, lo que ahorra un juicio.
En segundo lugar, podemos saber a partir de los ejemplos que existe una regla de que la combinación de pares es relativa entre sí. ¿Por qué dices eso? Si ordena la matriz del ejemplo, encontrará que cada vez que se toma el número de grupos, es el más grande y el más pequeño, el segundo más grande y el segundo más pequeño, y así sucesivamente.
Por lo tanto, uso punteros dobles, comenzando desde el principio y el final respectivamente, y no hay necesidad de juzgar. Cada vez que los dos punteros dan un paso, la complejidad de tiempo de for es solo O(n/2),
Pero la complejidad de tiempo general de mi algoritmo es O(nlogn), y las dos ordenaciones rápidas son grandes. De hecho, la segunda matriz que almacena la suma máxima de pares de números no necesita ordenarse rápidamente, basta con escribir directamente la relación de un solo ciclo y, finalmente, volver a max.
el código
import java.util.Arrays;
public class 数组中最大数对和的最小值 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// int nums[] = {3,5,2,3};
int nums[] = {3,5,4,2,4,6};
数组中最大数对和的最小值 s = new 数组中最大数对和的最小值();
System.out.println(s.minPairSum(nums));
// System.out.println(nums.length);
}
public int minPairSum(int[] nums) {
int max = 0, j = nums.length - 1;
Arrays.sort(nums);
int temp[] = new int[nums.length / 2];
for (int i = 0; i < nums.length / 2; i++) {
temp[i] = nums[i] + nums[j--];
// j++;
}
Arrays.sort(temp);
max = temp[temp.length - 1];
return max;
}
}