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

刷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;
}

 

 

相关文章:

  • FTP/TFTP/SSH/Telnet
  • 不小心把当前的环境变量路径覆盖掉怎么办
  • 项目管理学习-CSPM(1)
  • 手表功能RunModeTasks
  • 二叉搜索树 AVL树 红黑树 的性质
  • Java——泛型
  • Stellaris 群星 [DLC 解锁] CT 表 [Steam] [Windows SteamOS macOS]
  • rvalue引用()
  • 解决Jenkis安装、配置及账号权限分配时遇到的问题
  • 电脑怎么分屏操作?
  • 【Python】 `os.getenv()` vs. `os.environ.get()`:环境变量获取方式的本质差异解析
  • 用二进制魔法解锁复杂问题:状态压缩动态规划实战揭秘
  • 算法每日一题 | 入门-顺序结构-上学迟到
  • 9.城市基础设施更新工程
  • vulkanscenegraph显示倾斜模型(6.5)-vsg::DatabasePager
  • Linux网络编程 day4
  • 【Python】使用`python-dotenv`模块管理环境变量
  • 8.5/Q1,Charls高分经典文章解读
  • 代码随想录第33天:动态规划6(完全背包基础)
  • 第二章 - 软件质量
  • 《黎明的一切》:与正常世界脱轨后,我选择不再回去
  • 景点变回监狱,特朗普下令重新启用“恶魔岛”
  • 抗战回望15︱《五月国耻纪念专号》:“不堪回首”
  • 5名中国公民在美国交通事故中遇难
  • AI世界的年轻人|与总书记交流过的“00后”,渴望紧握时代赋予的接力棒
  • 澳大利亚联邦选举投票正式开始