p145は要素のランダムなコレクションをサポートします(leetcode 380)

1:問題の解決策

2:完全なコード例(C ++バージョンとJavaバージョン)

C ++:

クラスRandomizedSet 
{ 
private 
    map < intint > m_map; 
    vector < int > m_data;
public / * *ここでデータ構造を初期化します。* / 
    RandomizedSet(){ 

    } 

    / * *セットに値を挿入します。セットに指定された要素がまだ含まれていない場合はtrueを返します。* / 
    bool insert(int val)
    { 
        if(m_map.count(val)!= 0return  false ;
        m_data.push_back(val); 
        m_map [val] = m_data.size()- 1 ; 

        trueを返し ます
    } 

    / * *セットから値を削除します。セットに指定された要素が含まれている場合はtrueを返します。* / 
    BOOL削除(INT ヴァル)
    { 
        場合(m_map.count(ヴァル)== 0リターン 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); 

        trueを返し ます
    } 

    / * *セットからランダムな要素を取得します。* / 
    int getRandom()
    { 
        int idx = rand()%(m_data.size()); 

        m_data [idx]を返します。
    } 
};

Java:

クラスRandomizedSet 
    { 
        private Map <Integer、Integer> m_map = new HashMap <> ();
        private List <Integer> m_data = new ArrayList <> ();
        プライベートランダムRANDOM = new Random();
        / * *ここでデータ構造を初期化します。* / 
        public RandomizedSet(){ 

        } 

        / * *セットに値を挿入します。セットに指定された要素がまだ含まれていない場合はtrueを返します。* / 
        public boolean insert(int val)
        { 
               if(m_map.containsKey(val))return  false ; 
               m_data.add(val); 
               m_map.put(val、m_data.size() - 1 );
               trueを返し ます
        } 

        / * *セットから値を削除します。セットに指定された要素が含まれている場合はtrueを返します。* / 
        public boolean remove(int val)
        { 
               if(!m_map.containsKey(val))return  false ;
               int idx = m_map。get (val);
               int lastVal = m_data。get(m_data.size()-1 ); 
               m_data。セット(idx、lastVal); 
               m_data.remove(m_data.size() - 1 ); 
               m_map.put(lastVal、idx); 
               m_map.remove(val); 
               
               trueを返し ます
        } 

        / * *セットからランダムな要素を取得します。* / 
        public  int getRandom()
        { 
               int idx = RANDOM.nextInt(m_data.size()); 
               
               m_dataを返します。get (idx); 
        } 
    }

 

おすすめ

転載: www.cnblogs.com/repinkply/p/12728475.html