- Autor: vela de nieve negativa
- id: fuxuemingzhu
- Blog personal: http://fuxuemingzhu.cn/
- Cuenta oficial: Negative Snow Bright Candle
- Palabras clave en este artículo: Leetcode, Leetcode, preguntas de pincel, Python, C++, matriz, ventana deslizante, diferencia
Tabla de contenido
Tema Descripción
Se le proporciona una matriz de números enteros con subíndices a partir de 0 nums
, donde nums[i]
representa i
la puntuación del enésimo estudiante. También darte un número entero k.
Seleccione los puntajes de cualquier k estudiante de la matriz y minimice la diferencia entre los puntajes más altos y más bajos entre estos k puntajes.
Devuelve la menor diferencia posible.
Ejemplo 1:
输入:nums = [90], k = 1
输出:0
解释:选出 1 名学生的分数,仅有 1 种方法:
- [90] 最高分和最低分之间的差值是 90 - 90 = 0
可能的最小差值是 0
Ejemplo 2:
输入:nums = [9,4,1,7], k = 2
输出:2
解释:选出 2 名学生的分数,有 6 种方法:
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 4 = 5
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 1 = 8
- [9,4,1,7] 最高分和最低分之间的差值是 9 - 7 = 2
- [9,4,1,7] 最高分和最低分之间的差值是 4 - 1 = 3
- [9,4,1,7] 最高分和最低分之间的差值是 7 - 4 = 3
- [9,4,1,7] 最高分和最低分之间的差值是 7 - 1 = 6
可能的最小差值是 2
pista:
1 <= k <= nums.length <= 1000
0 <= nums[i] <= 10^5
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/minimum-difference- between-highest-and-lowest-of-k-scores
Tema al efecto
Elija k números arbitrariamente de la matriz y deje que el resultado del valor máximo-mínimo de estos k números sea el más pequeño.
método de resolución de problemas
Tomando nums = [9,4,1,7], k = 2
como ejemplo , vemos que [9, 7]
cuando se seleccionan estos dos números, la diferencia entre los dos números es 2
, y esta diferencia es la más pequeña. No importa qué otros dos números elija, la diferencia es mayor que 2.
¿Cómo encontrar la diferencia entre el valor máximo y el valor mínimo de k números? Esto nos lleva a la idea de ordenar la matriz y recorrer toda la matriz con una ventana deslizante de tamaño k. El valor más a la derecha de la ventana deslizante es el valor máximo de la ventana, y el valor más a la izquierda de la ventana deslizante es el valor mínimo de la ventana.
Por lo tanto, lo que estamos buscando es el resultado mínimo del número más a la derecha - número más a la izquierda en todas las ventanas deslizantes de tamaño k en la matriz ordenada.
El código C++ es el siguiente:
class Solution {
public:
int minimumDifference(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int res = INT_MAX;
for (int i = 0; i <= nums.size() - k; ++i) {
res = min(res, nums[i + k - 1] - nums[i]);
}
return res;
}
};
- Complejidad del tiempo: O ( N ∗ log ( N ) ) O(N*log(N))O ( norte∗l o g ( N ) ) , donde N es la longitud de la matriz.
- Complejidad del espacio: O ( 1 ) O(1)O ( 1 )。
Resumir
- Para temas fáciles, el método de escritura generalmente no es difícil. El foco está en la abstracción del tema.
- Preste atención a los límites de la ventana deslizante, no exceda el rango de la matriz.
Soy @实雪明珠, he escrito más de 1000 preguntas algorítmicas y he escrito más de 1000 soluciones algorítmicas, con un volumen de lectura de 3 millones. Sígueme y no te perderás mi maravillosa solución animada, el intercambio de preguntas de entrevistas y las actividades de cuestionarios en equipo. Ingresa a la página de inicio @重雪明珠Hay una organización de cuestionarios en el lado derecho, y ya no estarás solo al hacer cuestionarios
- Al cepillar las preguntas, si no sabe cómo cepillar las preguntas, puede leer LeetCode ¿Cómo cepillar?
- Si crees que son demasiadas preguntas y quieres mejorar rápidamente en poco tiempo, puedes leer las 100 preguntas más clásicas en LeetCode .
- Enviarle una plantilla de código para cepillar las preguntas: plantilla de código [LeetCode], sabrá cómo cepillar las preguntas
fecha
11 de febrero de 2022—— Acabo de ir a Sanya para el Año Nuevo chino