【LeetCode】1984. Diferencia mínima entre la puntuación K más alta y la más baja

  • 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

Tema Descripción

Se le proporciona una matriz de números enteros con subíndices a partir de 0 nums, donde nums[i]representa ila 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 = 2como 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 ( nortel o g ( N ) ) , donde N es la longitud de la matriz.
  • Complejidad del espacio: O ( 1 ) O(1)O ( 1 )

Resumir

  1. Para temas fáciles, el método de escritura generalmente no es difícil. El foco está en la abstracción del tema.
  2. 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

fecha

11 de febrero de 2022—— Acabo de ir a Sanya para el Año Nuevo chino

Supongo que te gusta

Origin blog.csdn.net/fuxuemingzhu/article/details/122873760
Recomendado
Clasificación