p145 admite la colección aleatoria de elementos (leetcode 380)

Uno: solución al problema

Dos: ejemplos de código completos (versión C ++ y versión Java)

C ++:

class RandomizedSet 
{ 
private : 
    map < int , int > m_map; 
    vector < int > m_data;
public :
     / * * Inicialice su estructura de datos aquí. * / 
    RandomizedSet () { 

    } 

    / * * Inserta un valor en el conjunto. Devuelve verdadero si el conjunto no contenía el elemento especificado. * / 
    bool insert ( int val) 
    { 
        if (m_map.count (val)! = 0 ) return  false ;
        m_data.push_back (val); 
        m_map [val] = m_data.size () - 1 ; 

        volver  verdadero ; 
    } 

    / * * Elimina un valor del conjunto. Devuelve verdadero si el conjunto contenía el elemento especificado. * / 
    bool remove ( int val) 
    { 
        if (m_map.count (val) == 0 ) return  false ;
        int idx = m_map [val];
        int lastVal = m_data [m_data.size () - 1 ]; 
        m_data [idx] = lastVal; 
        m_data.pop_back ();
        m_map [lastVal] = idx; 
        m_map.erase (val); 

        volver  verdadero ; 
    } 

    / * * Obtener un elemento aleatorio del conjunto. * / 
    int getRandom () 
    { 
        int idx = rand ()% (m_data.size ()); 

        devuelve m_data [idx]; 
    } 
};

Java:

class RandomizedSet 
    {
         mapa privado <entero, entero> m_map = new HashMap <> ();
        Lista privada <Integer> m_data = new ArrayList <> ();
        Random aleatorio privado = nuevo Random ();
        / * * Inicializa tu estructura de datos aquí. * / 
        public RandomizedSet () { 

        } 

        / * * Inserta un valor en el conjunto. Devuelve verdadero si el conjunto no contenía el elemento especificado. * / 
        public boolean insert ( int val) 
        { 
               if(m_map.containsKey (val)) devuelve  falso ; 
               m_data.add (val); 
               m_map.put (val, m_data.size () - 1 );
               volver  verdadero ; 
        } 

        / * * Elimina un valor del conjunto. Devuelve verdadero si el conjunto contenía el elemento especificado. * / 
        public boolean remove ( int val) 
        { 
               if (! m_map.containsKey (val)) return  false ;
               int idx = m_map. obtener (val);
               int lastVal = m_data. get (m_data.size () -1 ); 
               m_data. set (idx, lastVal); 
               m_data.remove (m_data.size () - 1 ); 
               m_map.put (lastVal, idx); 
               m_map.remove (val); 
               
               volver  verdadero ; 
        } 

        / * * Obtener un elemento aleatorio del conjunto. * / 
        public  int getRandom () 
        { 
               int idx = RANDOM.nextInt (m_data.size ()); 
               
               devuelve m_data. obtener (idx); 
        } 
    }

 

Supongo que te gusta

Origin www.cnblogs.com/repinkply/p/12728475.html
Recomendado
Clasificación