面试经典 150 题 380 274

2026/5/21

380. O(1) 时间插入、删除和获取随机元素


这题确实把我难住了,看了题解才觉得妙啊。

O(1)复杂度的插入就是插入数组最后

O(1)复杂度的删除就是用到哈希表unordered_map来存数组元素以及数组下标。
如何根据value来查找数组下标? 答:键值对中,<value, 数组下标>

cpp 复制代码
class RandomizedSet {
private:
    vector <int> v;
    unordered_map<int, int> mp;
public:
    RandomizedSet() {
        srand((unsigned)time(NULL));
    }
    //数据插入到vector,同时保存下标
    bool insert(int val) {
        if(mp.find(val) == mp.end()){
            v.push_back(val);
            mp.insert({val, v.size()-1});
            return true;
        }
        else{
            return false;
        }
    }
    //哈希表用来找元素的下标,删除后用最后一个元素来补齐
    bool remove(int val) {
        if(mp.find(val) == mp.end())
            return false;
        
        int index = mp[val];
        mp.erase(val);
        v[index] = v[v.size()-1]; //用最后一个元素来补齐
        mp[v[index]] = index; //放回哈希表
        v.pop_back(); //删除最后一个元素
        
        return true;
    }
    
    int getRandom() {
        return v[rand() % v.size()];
    }
};


 */

这个代码提交不能通过全部样例!原因就在remove函数中。如果只有一个元素时,会导致该元素又被重新添加到数组中。

改成这样就对了。

cpp 复制代码
		v[index] = v[v.size()-1]; //用最后一个元素来补齐
        mp[v[index]] = index; //放回哈希表
        v.pop_back(); //删除最后一个元素
        mp.erase(val); //哈希表删除要在放回之后,否则只有一个元素的情况会被重新放入

2026/5/18
274. H 指数

一开始看了提示使用排序后取中位数,通过37 / 83 个通过的测试用例。

这题也有点难,难在怎么想到用倒序来统计次数。

可以去题解区看大佬的特别解法。

cpp 复制代码
class Solution {
public:
    int hIndex(vector<int>& citations) {
        int n = citations.size();
        sort(citations.begin(), citations.end(), greater<int>());
        int h = 0;
        for(auto e : citations){
            if(e > h){
                h++;
            }
        }
        return h;
    }
};
相关推荐
shehuiyuelaiyuehao18 分钟前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
智购科技自动售货机厂家22 分钟前
2026自动售货机设备清洁效果自动验证:从图像比对到评分算法的工程实践~YH
人工智能·算法·计算机视觉
爱吃巧克力的程序媛37 分钟前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
YYYing.42 分钟前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
姜穆澜1 小时前
机器学习实战指南:从算法原理到工程落地
人工智能·算法·机器学习
Q一件事2 小时前
RWEQ——保留与消去P的soil_loss联合推导
算法
键盘会跳舞2 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
HugoStudio_SWAN2 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
那年窗外下的雪.2 小时前
AIDC 学习日志|第 20 天|多归属业务验收与哈希不均定位
学习·算法·哈希算法