#380 Insert Delete GetRandom O(1)
1.Design a data structure that supports all following operations in average O(1) time.
insert(val): Inserts an item val to the set if not already present.
remove(val): Removes an item val from the set if present.
getRandom: Returns a random element from current set of elements. Each element must have the same probability of being returned.
这个题用一个hash表存放每个val的位置,用vector存放每一个val
bool insert(int val) {
if(hash.find(val)!=hash.end())return false;
nums.emplace_back(val);
hash[val]=nums.size()-1;
return true;
}
/** Removes a value from the set. Returns true if the set contained the specified element. */
bool remove(int val) {
if(hash.find(val)==hash.end())return false;
int last=nums[nums.size()-1];
hash[last]=hash[val];
swap(nums[hash[val]],nums[nums.size()-1]);
nums.pop_back();
hash.erase(val);
return true;
}
/** Get a random element from the set. */
int getRandom() {
return nums[rand()%nums.size()];
}
#59. Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
直接看代码了,简洁明了
while(cur <= n * n) {
int i = rowBegin;
int j = colBegin;
//left to right
for(j = colBegin ; j <= colEnd; j++){
res[rowBegin][j] = cur++;
}
rowBegin++;
//top to bot
for(i = rowBegin ; i <= rowEnd; i++){
res[i][colEnd] = cur++;
}
colEnd--;
//right to left
for(j = colEnd ; j >= colBegin; j--){
res[rowEnd][j] = cur++;
}
rowEnd--;
//bot to top
for(i = rowEnd; i >= rowBegin; i--){
res[i][colBegin] = cur++;
}
colBegin++;
}
return res;