首页 > 其他分享 >代码随想录第7天 |● 454.四数相加II●383. 赎金信●15. 三数之和●18. 四数之和●哈希表总结

代码随想录第7天 |● 454.四数相加II●383. 赎金信●15. 三数之和●18. 四数之和●哈希表总结

时间:2024-06-13 20:56:55浏览次数:24  
标签:map 四数 15 string int 相加 随想录 下标

题目:454.四数相加Ⅱ

思路:

0.知道用map,但是map存啥
1.暴力法,四层循环遍历哈哈哈哈
2.分而治之,化繁为简,四个数组a,b,c,d分成两组,题目求符合要求的元祖个数,所以将a+b的值和出现次数存储,之后遍历查找c+d中0-(c+d)出现的次数,统计为结果
时间复杂度: O(n^2)
空间复杂度: O(n^2),最坏情况下A和B的值各不相同,相加产生的数字个数为 n^2

坑:

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int,int> map;
        for(int i=0;i<nums1.size();i++){
            for(int j=0; j<nums2.size();j++){
                int sum=nums1[i]+nums2[j];
                auto iter=map.find(sum);
                if(iter!=map.end()){
                    (iter->second)++;
                }else{
                     map.insert({sum,1});
                }
            }
        }
        //可优化为 范围for循环和 map[a+b]++;  
        //下标索引机制,使用下标访问不存在的元素时,会导致向map中添加该下标所对应的新元素``
        int count=0;
        for(int i=0;i<nums3.size();i++){
            for(int j=0; j<nums4.size();j++){
                int sum=nums3[i]+nums4[j];
                if(map.find(0-sum)!=map.end()){
                    count+=map[0-sum];
                }
            }
        }
        return count;
    }
};

补充:

map的操作

插入、查找、删除,遍历
插入
map<int,int> map

  1. pair
    map.insert(pair<int,int>(1,2));
  2. make_pair
    map.insert(make_pair<int,int>(1,3));
  3. value_type
    map.insert(map<int,int>::value_type(2,3));
  4. []
    map[3]=4 ; //插入key为3,value为4

在map中使用下标访问不存在的元素将导致在map容器中添加一个新的元素。

题目:383.赎金信

思路:

1.哈希数组,存储字符串中每个字母出现的次数,遍历第二个字符串时,--,如果有数组中有<0,则不能构成。
2.暴力法,

坑:

  1. 数组初始化错了
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        //string 可以使用下标访问和范围for循环
        //缺少 判断两个字符串长度,大于直接false
        if(ransomNote.size()>magazine.size())
            return false;
        int table[26]={0};  //报错,初始化{26,0}不对。
        for(auto m:magazine){
            table[m-'a']++;
        }
        for(auto r: ransomNote){
            table[r-'a']--;
            if(table[r-'a']<0)
                return false;
        }
       
       
        return true;
    }
};

补充:

string

访问string对象中的每一个元素
一个string对象表示一个字符序列,可以使用 范围for循环,
访问string对象中的单个字符

  1. 使用下标
  2. 使用迭代器

题目:15.三数之和

思路:

0.类似四数相加,分组为a+b和c,查找0-(a+b),使用两个map存储,一个存a,b ,一个存c,b 需要去重 看错了,是同一个数组内

  1. 暴力法 三层循环
  2. 哈希法,但是去重困难
  3. 三指针法,0,left,right、对应值相加,大了左移right,小了右移left 。难点也是去重 ,先排序就容易,因为目没要求返回下标,可以改变元素的位置

坑:

补充:

sort排序

今日总结

标签:map,四数,15,string,int,相加,随想录,下标
From: https://www.cnblogs.com/bamboo2233/p/18245499

相关文章

  • 5.15
    import'package:flutter/material.dart';import'../Do/UserDao.dart';classInsertColumnextendsStatelessWidget{InsertColumn({super.key});//CreatecontrollersfinalTextEditingController_usernameController=TextEditingControll......
  • HMI(人机交互)应用的15大领域,欢迎补充。
    HMI(Human-MachineInterface,人机界面)可以应用于许多不同的场景和行业,包括但不限于以下几个方面:工业控制系统:HMI在工业生产中广泛应用,用于监控和控制生产过程。例如,工厂中的控制面板、操作台和触摸屏等设备,用于操作和监视生产设备、调整参数和收集数据。智能家居系统:HMI用于......
  • 6.15 实验总结
    实验总结实验一:黄金分割法(0.618法)程序设计通过黄金分割法的实践,我深刻体会到了数学理论与实际问题结合的魅力。从编写代码实现0.618搜索法到观察算法逐步逼近最优解的过程,我不仅掌握了这种经典优化算法的精髓,还提升了编程技巧,包括函数定义、循环与条件判断等基本技能。实验中,我......
  • 6.15 工程数学实验一
    实验一:黄金分割法(0.618法)程序设计一、实验目的 通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。 二、实验内容 (1)请用0.618法求解优化问题: 的极小点和极小值(进退法确定初始区间),......
  • 2024.5.15
    8-7【Python0008】筛法求素数分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。【输入......
  • 6.15
    今天完成工程数学作业实验五实验五:MATLAB最优化工具箱的使用一、实验目的通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。通过一个投资组合优化问题的实例求解,培养学生解决......
  • Kimichat使用案例015:用kimichat批量重命名markdown文件并合并(零代码编程)
    文章目录一、介绍二、需合并的内容三、kimi输入内容四、kimi输出内容五、运行程序一、介绍  一个文件夹里面有很多个markdown文件,需要全部合并成一个txt文件。二、需合并的内容三、kimi输入内容  可以在kimichat输入框中输入提示词:你是一个Python编......
  • 洛谷 P2015 二叉苹果树
    题目链接:二叉苹果树思路    本题使用链式向前星存储树上的边,然后DFS搜索+简单dp。    dp数组,dp[i][j]表示节点i及其子树保留k根树枝得到的最大苹果数。son数组存储当前节点的孩子节点的编号和当前节点与孩子节点之间的树枝上的苹果个数。    对于dp递......
  • 构建之法15
    当我深入阅读《构建之法》的第十五章时,我被其中关于软件开发稳定和发布阶段的详细阐述深深吸引。本章不仅提供了关于如何确保软件项目稳定并顺利发布的策略和方法,还强调了团队在项目后期所面临的挑战和解决方案。通过这一章节的学习,我获得了许多宝贵的见解,并对我未来的软件开发实......
  • MySQL从入门到高级 --- 15.优化 && 16.pymysql
    文章目录第十五章&&第十六章:15.优化15.1查询SQL执行效率15.2定位低效率执行SQL15.3explain分析执行计划-基本使用15.4explain分析执行计划-id15.5explain分析执行计划-select_type15.6explain分析执行计划-type15.7explain分析执行计划-其他指标字段15......