面试经典 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;
    }
};
相关推荐
chenbingjie_c8 小时前
C++ 进阶核心知识点总结:模板、内存分区、new/delete、内存池
开发语言·c++
专注仿真9 小时前
ACM算法
算法·深度优先
Frank_refuel10 小时前
【C++】Json库介绍和使用
c++
重生之小比特10 小时前
【C++进阶】map和set
java·开发语言·c++
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼11 小时前
linux 进程信号(上)
linux·c++·算法
罗西的思考11 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
我叫黑大帅11 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go
richard_yuu11 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
mmmmath_312 小时前
LeetCode.225.用队列实现栈
算法