Prueba de máquina Huawei OD: Alibaba en busca de un cofre del tesoro dorado (II) (código fuente de Java)

Alibaba encuentra el cofre del tesoro dorado (II)

Descripción del título
Ali Baba, un pobre leñador, se topó con un tesoro oculto de un grupo de bandidos en su camino a cortar leña. Hay cajas numeradas del 0 al n en el tesoro oculto, y cada caja está marcada con el número de monedas de oro escondidas. en el cuadro.
Seleccione un conjunto de números del número de monedas de oro y destruya cada caja con estos números. Si se pueden destruir la mitad o más de las cajas, devuelva el tamaño mínimo de este conjunto de números.

La entrada describe
una cadena de números, separados por comas, por ejemplo: 6,6,6,6,3,3,3,1,1,5 El número de números en la cadena es par y el número > =1, <=100000: cada número >=1, <=100000;

Descripción de salida
El tamaño mínimo de este conjunto de números, por ejemplo: 2

ingresar producción ilustrar
6,6,6,6,3,3,3,1,1,5 2 Cuando los números del conjunto son 6 y 3, se pueden destruir 7 cajas, lo que representa más de la mitad.

analizar

  1. Comprenda el significado de la pregunta, esta pregunta es para permitirle encontrar un conjunto, la suma del número de ocurrencias de cada número en este conjunto representa la mitad o más del conjunto. No se puede usar el ciclo for, porque no se sabe cuántos números aparecerán para satisfacer la condición. Parece simple, pero puede ser un poco difícil para las personas con una base algorítmica un poco más débil.
  2. Esta pregunta sigue siendo la más fácil de usar el algoritmo de DP digital. Si no lo entiende, puede consultar mi blog [Algoritmo] Use un algoritmo digital para generar un número entero entre 0 y un número determinado (otro método de implementación que no sea el bucle for, bastante bien informado)
  3. Este ejemplo utiliza colecciones de mapas y listas para resolver el problema.
    3.1 Almacene cada número y el número de veces que aparece en la Lista y ordene la Lista. Cuantas más ocurrencias, más alto es el frente. Debido a que el tamaño de la colección debe ser el más pequeño, solo el número que aparece en la colección más grande posible puede ser el más pequeño.
    3.2 Recorra la matriz, tome las claves y los valores de la colección en secuencia de adelante hacia atrás y realice un juicio de suma para averiguar el resultado

Código de muestra

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class T64 {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		List<Integer> keyList = new ArrayList<>();
		Arrays.stream(input.split(",")).forEach(item -> {
    
    
			Integer key = Integer.parseInt(item);
			if (map.containsKey(key)) {
    
    
				map.put(key, map.get(key) + 1);
			} else {
    
    
				map.put(key, 1);
				keyList.add(key);
			}
		});
		int len = input.split(",").length;
		List<Map<Integer, Integer>> mapList = new ArrayList<>();
		for (Integer key1 : keyList) {
    
    
			Map<Integer, Integer> m = new HashMap<>();
			m.put(key1, map.get(key1));
			mapList.add(m);
		}
		mapList.sort(new Comparator<Map<Integer, Integer>>() {
    
    
			@Override
			public int compare(Map<Integer, Integer> o1, Map<Integer, Integer> o2) {
    
    
				Integer v1 = o1.get(o1.keySet().iterator().next());
				Integer v2 = o2.get(o2.keySet().iterator().next());
				if (v1 > v2)
					return -1;
				if (v1 < v2)
					return 1;
				return 0;
			}
		});
		int count = 0;
		int tempLen = 0;
		// System.out.println(mapList);
		while (tempLen < len / 2) {
    
    
			// System.out.println(mapList.get(count));
			tempLen += mapList.get(count).get(mapList.get(count).keySet().iterator().next());
			count++;
		}
		System.out.println(count);
	}
}

captura de pantalla del código en ejecución

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_33183456/article/details/131299526
Recomendado
Clasificación