面试经典 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;
    }
};
相关推荐
阿部多瑞 ABU2 分钟前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战
后端·算法·ui·pdf·c#
郝学胜-神的一滴7 分钟前
并查集深度入门:从玄学抽象到 QuickFind & QuickUnion 源码实战
数据结构·c++·python·程序人生·算法·软件开发
比奇堡裤头村7 分钟前
统计学习方法——决策树
算法·决策树·学习方法
灵晔君20 分钟前
【Linux】进程控制(一)——进程创建、进程终止与进程等待
linux·c语言·算法
程序员爱钓鱼36 分钟前
Rust 方法 Method详解:self、方法调用与API设计
后端·面试·rust
程序员爱钓鱼1 小时前
Go break、continue、goto 详解
后端·面试·go
ShineWinsu9 小时前
对于C++:IO流状态的详细解析
c++·面试·io·cin·io流状态·goodbit·failbit
「PlanA」9 小时前
测试开发面经001
面试
数模竞赛Paid answer9 小时前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序
算法·数学建模·中青杯
银-豆豆10 小时前
数据结构与算法-动态规划、回溯与贪心
算法·动态规划