当前位置: 首页 > ds >正文

刷leetcodehot100返航版--哈希表5/5、5/6

回顾一下之前做的哈希,貌似只有用到

  • unordered_set:存储无序元素
  • unordered_map:存储无序键值对

代码随想录

常用代码模板2——数据结构 - AcWing

C++知识回顾-CSDN博客

1.两数之和5/5【30min】

1. 两数之和 - 力扣(LeetCode)

1.set和map分不清,set是只有值,map是键值对。

2、map的键值弄反了,找数的话,键是数,值是索引i

3.考虑如果有重复的数怎么办:不要提前把数组转成map,一边遍历一边转。

class Solution {//考虑输入
public:vector<int> twoSum(vector<int>& nums, int target) {//快速判断一个元素是否出现集合里//如果是哈希,怎么存数据//没考虑一样的元素// unordered_set<int> mySet;// for(int i= 0;i<nums.size();i++){//     mySet.insert(target - nums[i]);// }// for(int i= 0;i<nums.size();i++){//     auto iter = mySet.find(nums[i]);//     if(iter!=mySet.end()){//         continue;//     }//     return {i,*iter};// }unordered_map<int,int>findmap;//快速找下标//有重复的怎么办for(int i = 0;i<nums.size();i++){auto it = findmap.find(target-nums[i]);if(it != findmap.end()){return {i,it->second};}findmap[nums[i]] = i;//索引和值反了}return {};}
};

字母异位词分组【30min】

49. 字母异位词分组 - 力扣(LeetCode)

map和set的区别,map是键值对,set是只有值,vector和set的区别是???

unordered_set/map比set/map用的多的原因是O(1)????

const string&使用引用避免拷贝【如果是不操作这个对象,可以省点空间,否则就创建了新对象】

 

语法问题:

// ❌ 错误代码
for (auto it : mp) {         // it是键值对的拷贝,不是迭代器!
    result.push_back(it->second); // 错误:it不是指针/迭代器
}

// ✅ 修正代码
for (const auto& entry : mp) { // entry是键值对的引用
    result.push_back(entry.second); // 正确:用 . 访问成员
}

 anto it = mp.find("a")这里it是指针

for(auto it : mp)这里it是一个对象,访问pair的键or值需要用点(.)it.second

 问题:1.string的sort函数怎么用:有一个strs:sort(strs.begin(),strs.end())

2.键和值怎么考虑,这里其实不需要find

3.一对多的处理1个sort后的string对应多个string怎么办:string对应vector<string>【妙】

4.string的初始化,有一个string a,则string b = a;

5.迭代器是指针还是对象,见上

6.想了一下一对多怎么处理,原来想用multiset,find(key) 返回指向 第一个匹配键 的元素的迭代器,可以用equal_range,放后,以后看。

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//tae和tea如何等价//如何处理输入输出//按次序排列?//先字符串排序,转成一样的用map存。然后find,键:原,值:改后的字符串vector<vector<string>>result;// unorder_map<string,string> word;//有重复怎么办,如果multi_map有重复find返回什么//z这个不用find了,直接遍历:键:改后的字符串;值:原unordered_map<string,vector<string>>mp;for(const auto &it:strs){//这里it是数组// string newOne = sort(it.begin(),it.end());string newOne = it;sort(newOne.begin(),newOne.end());mp[newOne].push_back(it);//*it?}for(const auto &it:mp){result.push_back(it.second);}return result;}};

#include <iostream>
#include <map>

int main() {
    std::multimap<int, std::string> mmap = {
        {1, "A"}, {1, "B"}, {2, "C"}, {1, "D"}
    };

    // 方法1:使用 find
    auto it = mmap.find(1);
    if (it != mmap.end()) {
        std::cout << "First match: " << it->second << std::endl; // A
    }

    // 方法2:使用 equal_range
    auto range = mmap.equal_range(1);
    std::cout << "All values for key 1:\n";
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << "  " << it->second << std::endl; // A, B, D
    }

    // 方法3:使用 lower_bound 和 upper_bound
    std::cout << "All values for key 1 (via bounds):\n";
    auto lower = mmap.lower_bound(1);
    auto upper = mmap.upper_bound(1);
    for (auto it = lower; it != upper; ++it) {
        std::cout << "  " << it->second << std::endl; // A, B, D
    }

    return 0;
}

 

 

http://www.xdnf.cn/news/4251.html

相关文章:

  • Java抽象类与接口详解
  • 【项目】基于ArkTS的网吧会员应用开发(1)
  • 访问计划(C++)
  • BC9 printf的返回值
  • 学习路线(工业自动化软件架构)
  • Imagine Explainers:AI × 可视化 × 趣味讲解,让复杂变简单
  • 1. 设计哲学与核心价值
  • C/C++滑动窗口算法深度解析与实战指南
  • 2025年第十六届蓝桥杯省赛JavaB组真题
  • 【RocketMQ Broker 相关源码】-注册 broker 信息到所有的 NameServer
  • gcc/g++用法摘记
  • torch.nn.Sequential() and torch.nn.ModuleList()
  • 用输入输出变量根据超稳定性理论设计模型参考自适应系统
  • 迭代器模式
  • map和set的设计以及红黑树的设计
  • 英伟达语音识别模型论文速读:Fast Conformer
  • 学习黑客Nmap 实战
  • Java学习手册:Spring 多数据源配置与管理
  • 信息系统项目管理工程师备考计算类真题讲解十二
  • 破局者手册 Ⅰ:测试开发核心基础,解锁未来测试密钥!
  • 【NLP】27. 语言模型训练以及模型选择:从预训练到下游任务
  • RAG知识库只是表面简单!
  • Kubernetes排错(七)-节点排错
  • 除了java.nio.file.StandardCopyOption,还有哪些类可以实现文件的复制和移动?
  • C++动态库和静态库的生成和使用
  • linux crash工具详解
  • android-ndk开发(1): 搭建环境
  • 星途-(4)
  • 关于Python:9. 深入理解Python运行机制
  • DeepSeek技术发展详细时间轴与技术核心解析