面试经典 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;
    }
};
相关推荐
m沐沐4 小时前
【深度学习】YOLOv2目标检测算法——改进点、网络结构与聚类先验框解析
人工智能·pytorch·深度学习·算法·yolo·目标检测·transformer
不会就选b4 小时前
算法日常・每日刷题--<链表>3
数据结构·算法·链表
测试界的世清4 小时前
各大厂软件测试面试题+答案纯干货
面试·职场和发展
geovindu5 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
liang_jy6 小时前
内存管理(七)—— 内存映射
面试·操作系统
SunShaoLu6 小时前
实测7款思维导图工具图片导出能力:PNG/SVG/PDF全支持,附选型指南
职场和发展·效率工具·思维导图
liang_jy6 小时前
内存管理(六)—— 进程的内存映像
面试·操作系统
Zachery Pole7 小时前
CCF-CSP备战NO.7【队列】
算法
闪电悠米7 小时前
力扣hot100-48.旋转图像-转置翻转详解
算法·leetcode·职场和发展
满天星83035777 小时前
【算法】最长递增子序列(三种解法)
算法