Tema de participación de la Fase 2 del Desafío de temas de CSDN
: Solución de algoritmos
Directorio de artículos
Enlace del tema y descripción.
https://leetcode.cn/problems/sort-array-by-increasing-frequency/
Le proporcionamos números de matriz enteros, ordene la matriz en orden ascendente según la frecuencia de cada valor. Si hay varios valores con la misma frecuencia, ordénelos en orden descendente según el valor en sí.
Devuelva la matriz ordenada.
Ejemplo 1:
Entrada: nums = [1,1,2,2,2,3]
Salida: [3,1,1,2,2,2]
Explicación: '3' tiene frecuencia 1, '1' tiene frecuencia 2, '2 'La frecuencia es 3.
Ejemplo 2:
Entrada: nums = [2,3,1,3,2]
Salida: [1,3,3,2,2]
Explicación: Las frecuencias de '2' y '3' son 2, por lo que están en orden descendente según el valor mismo Ordenar.
Ejemplo 3:
Entrada: números = [-1,1,-6,4,5,-6,1,4,1]
Salida: [5,-1,4,4,-6,-6,1,1,1]
pista:
1 <= números.longitud <= 100
-100 <= números[i] <= 100
Palabras clave: frecuencia de clasificación
método uno:
ejecutar captura de pantalla
el código
public int[] frequencySort(int[] nums) {
// 首先计算频率
Map<Integer, Integer> hash = new HashMap<>(nums.length);
ArrayList<Integer> list = new ArrayList<>(nums.length);
for (int num : nums) {
hash.put(num, hash.getOrDefault(num, 0) + 1);
list.add(num);
}
// 因为这里直接int[] 数组排序 编译不通过,所以浪费了空间转储
// 然后排序
list.sort((o1, o2) -> {
// 取出频率作为排序
Integer fr1 = hash.get(o1);
Integer fr2 = hash.get(o2);
// 如果频率相等则数值逆序( - )
return fr1.equals(fr2) ? -Integer.compare(o1, o2) : Integer.compare(fr1, fr2);
});
// 转 int 数组
return list.stream().mapToInt(Integer::intValue).toArray();
}
fin
Bienvenido a comunicarse en el área de comentarios, registrarse todos los días y ¡apresúrate! ! !