【Pregunta diaria de LeetCode】—— 575. Divide los dulces

Una [categoría de tema]

  • tabla de picadillo

Dos [dificultad de la pregunta]

  • Simple

Tres [número de tema]

  • 575. Dividir caramelos

Cuatro [descripción del título]

  • Alice tiene n caramelos, y el tipo de la i-ésima pieza de azúcar es candyType[i]. Alice nota que está aumentando de peso, por lo que visita a un médico.
  • El médico le aconseja a Alicia que coma menos azúcar y que solo coma n/2 de toda su azúcar (n es un número par). Alice ama tanto estos azúcares que quiere comer tantos tipos diferentes de azúcar como sea posible mientras sigue los consejos de su médico.
  • Dada una matriz de enteros candyType con una longitud de n, devuelve: Alice puede comer la cantidad máxima de dulces cuando solo come n / 2 dulces.

Cinco [ejemplo de tema]

  • Ejemplo 1:

    • Entrada: tipo de caramelo = [1,1,2,2,3,3]
    • Salida: 3
    • Explicación: Alice solo puede comer 6 / 2 = 3 dulces, como solo hay 3 tipos de dulces, puede comer uno de cada uno.
  • Ejemplo 2:

    • Entrada: tipo de caramelo = [1,1,2,3]
    • Salida: 2
    • Explicación: Alice solo puede comer 4 / 2 = 2 dulces, no importa si el tipo que elige comer es [1,2], [1,3] o [2,3], solo puede comer dos tipos diferentes de dulces. caramelo
  • Ejemplo 3:

    • Entrada: tipo de caramelo = [6,6,6,6]
    • Salida: 1
    • Explicación: Alice solo puede comer 4/2 = 2 dulces, aunque puede comer 2 dulces, solo puede comer 1 tipo de dulces.

Seis [mensaje de tema]

  • n = = Tipo de caramelo. longitud == tipocaramelo.longitudnorte==c andy ty p e . _ _ _ longitud _ _ _ _ _
  • 2 < = norte < = 1 0 4 2 <= norte <= 10^42<=norte<=1 04
  • n es un número par n es un número parn es un número par
  • − 1 0 5 < = tipo de caramelo [ i ] < = 1 0 5 -10^5 <= tipo de caramelo[i] <= 10^51 05<=caramelo tipo [ i ] _ _ _ _ _ _<=1 05

Siete [ideas para resolver problemas]

  • Porque el número total de dulces es nn , por lo que según el significado de la pregunta, el resultado final devuelto no excederán 2 \frac{n}{2}2n
  • Además, suponga que estos dulces tienen un total de mmm tipos, por lo que el resultado devuelto no excederámmmetro
  • Si m ≤ n 2 m \leq \frac{n}{2}metro2n, entonces significa que puedes comer dulces repetidos, pero puedes comer como máximo mmm tipos de dulces, el resultado devuelto esmmmetro
  • Si metro ≥ norte 2 metro \geq \frac{n}{2}metro2n, entonces significa que no importa cuántos tipos de dulces haya, solo puedes comer n 2 \frac{n}{2}2ndulce
  • En resumen, el resultado final devuelto es: min ( m , n 2 ) min(m, \frac{n}{2})min ( m ,2n)
  • Para lograr la idea anterior, puede usar una tabla hash, que es relativamente simple. Para obtener más detalles, consulte el siguiente código
  • Finalmente devuelve el resultado.

Ocho 【Frecuencia de tiempo】

  • Complejidad del tiempo: O ( n ) O(n)O ( n ) ,nnn es la longitud de la matriz entrante
  • Complejidad espacial: O ( n ) O(n)O ( n ) ,nnn es la longitud de la matriz entrante

Nueve [implementación de código]

  1. Versión del lenguaje Java
class Solution {
    
    
    public int distributeCandies(int[] candyType) {
    
    
        HashSet<Integer> set = new HashSet<>();
        for(int i = 0;i < candyType.length;i++){
    
    
            set.add(candyType[i]);
        }
        return Math.min(set.size(), candyType.length / 2);
    }
}
  1. Versión en lenguaje C
int distributeCandies(int* candyType, int candyTypeSize)
{
    
    
    int* map = (int*)calloc(200001, sizeof(int));
    for(int i = 0;i < candyTypeSize;i++)
    {
    
    
        map[candyType[i] + 100000]++;
    }
    int count = 0;
    for(int i = 0;i < 200001;i++)
    {
    
    
        if(map[i] > 0)
        {
    
    
            count++;
        }
    }
    return fmin(count, candyTypeSize / 2);
}
  1. Versión en lenguaje Python
class Solution:
    def distributeCandies(self, candyType: List[int]) -> int:
        return min(len(set(candyType)), len(candyType) // 2)
  1. Versión del lenguaje C++
class Solution {
    
    
public:
    int distributeCandies(vector<int>& candyType) {
    
    
        return min(unordered_set<int>(candyType.begin(), candyType.end()).size(), candyType.size() / 2);
    }
};

Diez 【Resultados de envío】

  1. Versión del lenguaje Java
    inserte la descripción de la imagen aquí

  2. Versión en lenguaje C
    inserte la descripción de la imagen aquí

  3. Versión en lenguaje Python
    inserte la descripción de la imagen aquí

  4. Versión del lenguaje C++
    inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/IronmanJay/article/details/132183552
Recomendado
Clasificación