实现RandomizedSet 类:
RandomizedSet() 初始化 RandomizedSet 对象
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1) 。
C++
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <unordered_map>
#include <stack>
#include <queue>
#include <thread>
#include <mutex>
#include <algorithm>
using namespace std;class TheClass{vector<int> nums;unordered_map<int,int> map; public: TheClass(){}public: bool insert(int val){if( !map.count(val) ){int index=nums.size();nums.push_back(val);map[val]=index;return true;}else{return false;}}public: bool remove(int val){if( map.count(val) ){int index=map[val];nums[index]=nums[nums.size()-1];nums.pop_back();map[nums[index]]=index;map.erase(val);return true;}else{return false;}}public: int getRandom(){int index=rand()%nums.size();return nums[index];}public: void print(){printf("\n");for( int i=0;i<nums.size();i++ ){printf(" %d",nums[i]);}printf("\n");}};int main(){TheClass tc;bool result=tc.insert(1);tc.print();tc.remove(2);tc.print();tc.insert(2);tc.print();tc.remove(1);tc.print();tc.insert(2);tc.print();return 0;
}
时间复杂度
O ( 1 ) O(1) O(1)
空间复杂度
O ( n ) O(n) O(n)
Java
import java.util.Scanner;
import java.lang.Math;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;public class java380{List<Integer> nums;Map<Integer,Integer> maps; public java380(){nums=new ArrayList<Integer>();maps=new HashMap<Integer,Integer>();} public boolean insert(int val){if( !maps.containsKey(val) ){int index=nums.size();nums.add(val);maps.put(val,index);return true; }else{return false;}}public boolean remove(int val){if( maps.containsKey(val) ){int index=maps.get(val);nums.set(index,nums.get(nums.size()-1));maps.put(nums.get(nums.size()-1),index);nums.remove(nums.size()-1);maps.remove(val);return true;}else{return false;}}public int getRandom(){int index=(int)(Math.random()*nums.size());return nums.get(index); }public void print(){System.out.println("");for( int i=0;i<nums.size();i++ ){System.out.print(" "+nums.get(i));}System.out.println("");}public static void main(String [] args){java380 j38=new java380();j38.insert(1);j38.print();j38.remove(2);j38.print();j38.insert(2);j38.print();j38.remove(1);j38.print();j38.insert(2);j38.print();}
}
时间复杂度
O ( 1 ) O(1) O(1)
空间复杂度
O ( n ) O(n) O(n)
Python
import random;
class python380:def __init__(self):self.nums=[];self.maps={};def insert(self,val: int) -> bool:if val not in self.nums:index=len(self.nums);self.maps[val]=index;self.nums.append(val);return True;else:return False;def remove(self,val: int) -> bool:if val in self.nums:index=self.maps[val];self.nums[index]=self.nums[len(self.nums)-1];self.maps[self.nums[len(self.nums)-1]]=index;del self.maps[val];self.nums.pop(len(self.nums)-1);return True;else:return False;def getRandom(self) -> int:index=random.randint(0,len(self.nums));return self.nums[index];def p(self):print("\n");for val in self.nums:print(" "+str(val));print("\n"); p38=python380();
p38.insert(1);
p38.p();
p38.remove(2);
p38.p();
p38.insert(2);
p38.p();
p38.remove(1)
p38.p();
p38.insert(2);
p38.p();
时间复杂度
O ( 1 ) O(1) O(1)
空间复杂度
O ( n ) O(n) O(n)