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

LeetCode热题100题|1.两数之和,49.字母异位词分组

1.两数之和

题目链接:1. 两数之和 - 力扣(LeetCode) 

这道题的暴力解法应该就是依次遍历两个数,等于target就返回它们的下标

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for (int i = 0; i < nums.size(); i++) {
            for (int j = i + 1; j < nums.size(); j++) {
                if (nums[i] + nums[j] == target) {
                    return {i, j};
                }
            }
        }
        return {};//无解时返回空数组
    }
};

哈希表这种方法可以用空间换时间, 把元素设置为key,下标设置成value,一个key可以对应多个value,比如有数组【3,3,3,2】 target为5

3这个元素会有多个下标(0,1,2),收集结果想让他为【2,3】覆盖原下标的话就用map[nums[i]]=i;

如果不覆盖原下标就是我想收集结果是【0,3】不覆盖原下标的话就用map.insert({nums[i],i});

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        for (int i = 0; i < nums.size(); i++) {
            int s = target - nums[i];
            if (map.find(s) != map.end()) {
                return {map[s], i};
            } else {
                map[nums[i]]=i;
            }
        }
        return {};
    }
};

49.字母异位词分组

题目链接:49. 字母异位词分组 - 力扣(LeetCode)

天哪,感觉做这道题一层皮差点下来...

我觉得它的思路把每一个字母进行从小到大排序,相同的就放在一个map容器里面

然后比如我们就开始把键"abc"存在mp容器里面,里面就会放["cab","bca","cba"],emplace_back是vector数组进行调用的,如果发现该数在vector里面那就不加了,不在的话就会往里面添加。

for(string &str:strs){
        string key=str;
        sort(key.begin(),key.end());
        mp[key].emplace_back(str);
       }

 这样我们进行遍历每一个字符,就可以把相同的字符放在mp前面,不同的放在后面,像这样:

mp = {
    {"aet", ["eat", "tea", "ate"]},
    {"ant", ["tan", "nat"]}
}

然后我们收集结果ans,其实就是收集["eat", "tea", "ate"] ["tan", "nat"]可以用迭代器进行收集,下面是用迭代器的思路:

  1. it 指向 {"aet": ["eat", "tea", "ate"]}

  2. it->second 是 ["eat", "tea", "ate"]

  3. ans.emplace_back(it->second) → ans 变为 [ ["eat", "tea", "ate"] ]

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
       unordered_map<string,vector<string>> mp;
       for(string &str:strs){//在mp中存入结果
        string key=str;
        sort(key.begin(),key.end());
        mp[key].emplace_back(str);
       }
       vector<vector<string>> ans;//在ans中收集结果
       for(auto it:mp){
        ans.emplace_back(it.second);
       }
       return ans;
    }
};

相关文章:

  • [WEB开发] Mybatis
  • CSP历年题解
  • Android 启动流程详解:从上电到桌面的全流程解析
  • Netty源码—7.ByteBuf原理四
  • K8s证书--运维之最佳选择(K8s Certificate - the best Choice for Operation and Maintenance)
  • 主键id设计
  • 华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )
  • 文件描述符,它在哪里存的,exec()后还存在吗
  • 【STM32】对stm32F103VET6指南者原理图详解(超详细)
  • 支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施
  • ✨分享我在飞书多维表格中使用DeepSeek的经历✨
  • STM32F103_LL库+寄存器学习笔记05 - GPIO输入模式,捕获上升沿进入中断回调
  • 飞速(FS)InfiniBand解决方案助力领先科技公司网络升级
  • kettle插件-mysql8数据库插件
  • MySQL进阶
  • 【linux复习】——进程间通信
  • 【HarmonyOS NEXT】EventHub和Emitter的使用场景与区别
  • 基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)
  • UART(通用异步收发传输器)
  • 删除排序链表中的重复元素
  • 美叙领导人25年来首次会面探索关系正常化,特朗普下令解除对叙经济制裁
  • 秦洪看盘|指标股发力,A股渐有突破态势
  • 多个侵华日军细菌战部队留守名簿文件首次公布
  • 习近平同巴西总统卢拉共同出席合作文件签字仪式
  • 习近平同巴西总统卢拉会谈
  • 季后赛主场优势消失之谜,这事竟然要赖库里