La máxima dulzura de la caja regalo【LC2517】
Se le da una matriz de números enteros positivos
price
dondeprice[i]
denota el precio de losith
dulces y un número entero positivok
.La tienda vende canastas de
k
distintos dulces. El sabor de una canasta de dulces es la diferencia absoluta más pequeña de los precios de dos dulces cualesquiera en la canasta.Devuelve el máximo sabor de una canasta de golosinas.
Maximizar y minimizar temas similares
-
Idea: Usa la búsqueda binaria para encontrar la máxima dulzura
- La monotonicidad de esta pregunta es: cuando el grado mínimo de dulzura [el valor mínimo del valor absoluto de la diferencia entre dos elementos cualesquiera de la matriz] ** es mayor, los tipos de dulces que se pueden seleccionar son menores [el número de elementos en el número de matriz seleccionado], por lo que la respuesta final se puede encontrar mediante búsqueda binaria
- Transforme el significado de la pregunta en: Cuando el número seleccionado sea cierto, encuentre el valor máximo yy de la dulzura mínimay , el límite inferior de la búsqueda binaria es 0, y el límite superior esla diferencia entre el elemento más grande y el elemento más pequeño en la matriz/(k-1)
-
lograr
-
price
Ordenar la matriz en orden ascendente primero -
Luego realice una búsqueda binaria, cuando la búsqueda binaria sea mínima dulzura yyy , es necesario juzgar sikkk tipos de dulces, sikk tipos de caramelos, entonces podemos aumentar la diferencia para obtener un dulzor mínimo mayor; sikdulces en k , luego reduce la diferencia
-
Cada vez que la búsqueda tenga éxito, registre la dulzura mínima actual, y la última dulzura mínima es la dulzura máxima y mínima
-
¿Cómo juzgar cuántos dulces se pueden sacar por la diferencia actual?
Iteración de simulación, el primer caramelo toma precio [ 0 ] precio[0]p r i ce [ 0 ] , el primer dulce tomaprecio [ 0 ] + y precio[0]+yprecio [ 0 ] _ _ _+y的precio [ i ] precio [i]precio [ i ] en ... _ _
-
-
el código
class Solution { public int maximumTastiness(int[] price, int k) { Arrays.sort(price); int n = price.length; int l = 0, r = price[n - 1] - price[0]; int ans = 0; while (l <= r){ int mid = (r + l) / 2; if (check(price, mid ,k)){ ans = mid; l = mid + 1; }else{ r = mid - 1; } } return ans; } public boolean check(int[] price, int m, int k){ int count = 1; int preIndex = 0; for (int i = 1; i < price.length; i++){ if (price[i] - price[preIndex] >= m ){ count++; preIndex = i; } } return count >= k; } }
- la complejidad
- Complejidad del tiempo: O ( nlog ( n C ) ) O(nlog(nC))O ( n l o g ( n C )) ,nnn es la longitud de la matriz y C es la diferencia entre los valores mayor y menor de la matriz. La complejidad de tiempo requerida para clasificar esO ( nlogn ) O(nlog n)O ( n l o g n ) , la complejidad temporal de la búsqueda binaria esO ( log C ) O(logC)O ( l o g C ) , cada búsqueda binaria necesita juzgar si la complejidad del tiempo esO ( n ) O(n)O ( n ) , por lo que la complejidad temporal total esO ( nlog ( nc ) ) O(nlog(nc))O ( n l o g ( n c ))
- Complejidad del espacio: O (logn) O(logn)O ( log n ) , el espacio de pila requerido para ordenar
- la complejidad