代码随想录算法训练营第七天|LeetCode 454. 四数相加 II 、383. 赎金信、 15. 三数之和、18. 四数之和

news2024/11/23 3:43:26

LeetCode 454. 四数相加 II

题目链接:454. 四数相加 II

分析:

本题比较简单,因为是无关的四个数组,所以不需要考虑去重,所以用哈希比较简单

思路:

  1. 定义个无序map
  2. 先将nums1和nums2的和的数都存进去,并且每个数的value值都赋1
  3. 然后用个嵌套for循环去找有没有符合的数,有的话就加上对应的1,这样就出来有多少个,最后返回即可。
class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int,int> map;
        for (int a : nums1) {
            for (int b : nums2) {
                map[a+b] ++;
            }
        }
        int count = 0;
        for (int c : nums3) {
            for (int d : nums4) {
                if (map.find(0-c-d) != map.end()) {
                    count += map[0-c-d];
                }
            }
        }
        return count;
    }
};

在这里插入图片描述

LeetCode 383. 赎金信

题目链接:383. 赎金信

分析:此题和之前做的有效字母异位词差不多,都是一样的思路

思路:

  1. 先创建个26位的数组,
  2. 因为要判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成,所以先将magazine的所有字母的先放进去,相对位置进行++操作
  3. 然后将ransom的所有字母的再放进去,相对位置进行–操作
  4. 如果ransom可以由magazines 里面的字符构成,这时候数组里面所有位置只会有>=0的,不会又小于0的,如果有小于0的,就说明这个ransom里面出现了magazine多的字符。
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int fu_zhu[26] = {};
        for (int i = 0; i < magazine.length(); i++) {
            fu_zhu[magazine[i] - 'a'] ++;
        }
        for (int i = 0; i < ransomNote.length(); i++) {
            fu_zhu[ransomNote[i] - 'a'] --;
        }
        for (int i = 0; i < 26; i++) {
            if (fu_zhu[i] < 0){
                return false;
            }
        }
        return true;

    }
};

在这里插入图片描述

LeetCode 15. 三数之和

题目链接:15. 三数之和

分析:此题比较难,我知道用双指针,写了半天一直没AC,就去看卡哥的代码了,属实是妙啊

在这里插入图片描述

思路:

  1. 先创建个二维容器v,并且对nums排序一下
  2. 开始遍历i
  3. 进行下剪枝
  4. 去重a,注意这里使用nums[i] == nums[i-1],不然会漏掉测试情况
  5. 然后设置个左右指针,开始寻找对应的b、c的值
  6. 和大于0,右指针往左走
  7. 和小于0,左指针往右走
  8. 和正好相等,存进去
  9. 再对左右指针++和–
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> v;
        sort(nums.begin(),nums.end());
        for(int i = 0; i < nums.size(); i++){
            if (nums[i] > 0) {
                return v;
            }
            //去重a
            //注意这里去重的使用方法,以避免丢掉了-1,-1,2的情况
            if (i > 0 && nums[i] == nums[i-1]) {
                continue;
            }
            int left = i + 1;
            int right = nums.size() - 1;
            while(left < right) {
                if (nums[i] + nums[left] + nums[right] > 0) {
                    right --;
                }
                else if (nums[i] + nums[left] + nums[right] < 0) {
                    left ++;
                }
                else {
                    v.push_back(vector<int>{nums[i],nums[left],nums[right]});
                    //去重 bc
                    while (left < right && nums[right] == nums[right - 1]){
                        right --;
                    }
                    while (left < right && nums[left] == nums[left + 1]) {
                        left ++;
                    }
                    left ++;
                    right --;
                }
            }
        }
        return v;
    }
};

在这里插入图片描述

LeetCode 18. 四数之和

题目链接:18. 四数之和

分析:此题有了上一题的借鉴其实也没有太难,就是多了个循环、剪枝和去重。

思路:

  1. 先创建个二维容器v,并且对nums排序一下
  2. 开始遍历i
  3. 进行下剪枝
  4. 去重a
  5. 嵌套开始遍历j
  6. 二级剪枝
  7. 去重b
  8. 然后设置个左右指针,开始寻找对应的c、d的值
  9. 和大于0,右指针往左走
  10. 和小于0,左指针往右走
  11. 和正好相等,存进去
  12. 再对左右指针++和–
class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> v;
        sort(nums.begin(),nums.end());
        for (int i = 0; i < nums.size(); i++) {
            //剪枝
            if (nums[i] > target  && nums[i] >= 0) {
                break;
            }
            //对i去重
            if (i > 0 && nums[i] == nums[i-1]) {
                continue;
            }
            for (int j = i+1; j < nums.size(); j++) {
                //二级剪枝
                if (nums[i]+nums[j] > target && nums[i]+nums[j] >= 0) {
                    break;
                }
                //对j进行去重
                if (j > i+1 && nums[j] == nums[j -1]) {
                    continue;
                }
                int left = j + 1;
                int right = nums.size() - 1;
                while (left < right) {
                    if ((long)nums[i]+nums[j]+nums[left]+nums[right] > target) {
                        right --;
                    }
                    else if ((long)nums[i]+nums[j]+nums[left]+nums[right] < target) {
                        left ++;
                    }
                    else{
                        v.push_back(vector<int>{nums[i],nums[j],nums[left],nums[right]});
                        //去重cd
                        while (left < right && nums[right] == nums[right - 1]){
                            right--;
                        }
                        while (left < right && nums[left] == nums[left + 1]){
                            left++;

                        }
                        left ++;
                        right --;
                    }
                }
            }
        }
        return v;
    }
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单目标应用:世界杯优化算法(World Cup Optimization,WCO)求解单仓库多旅行商问题SD-MTSP(可更改旅行商个数及起点)

一、世界杯优化算法 世界杯优化算法&#xff08;World Cup Optimization&#xff0c;WCO)由Navid Razmjooy等人于2016年提出&#xff0c;该算法模拟了国际足联世界杯比赛&#xff0c;思路新颖&#xff0c;收敛速度快&#xff0c;全局寻优能力强。 算法原理参考&#xff1a;智…

[附源码]java毕业设计学生宿舍管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

新型智能优化算法——海鸥优化算法(基于Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

基于莱维飞行扰动策略的麻雀搜索算法(ISSA)(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【强化学习论文合集】ICML-2022 强化学习论文 | 2022年合集(二)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

[附源码]java毕业设计校园摄影爱好者交流网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

elasticsearch bucket 之rare terms聚合

文章目录1、背景2、需求3、前置准备3.1 准备mapping3.2 准备数据4、实现需求4.1 dsl4.2 java代码4.3 运行结果5、max_doc_count 和 search.max_buckets6、注意事项7、完整代码8、参考文档1、背景 我们知道当我们使用 terms聚合时&#xff0c;当修改默认顺序为_count asc时&…

nodejs+mysql+vscode网上图书商城销售管理系统vue

当前社会是一个网络高度发达的社会&#xff0c;人们都处在互联网时代中&#xff0c;对于知识的获取都是通过互联网&#xff0c;为了鼓励人们积极获取纸质知识&#xff0c;我想要设计一个网上图书售卖系统。这个系统设计的目的是为了方便人们们作为参考资料. 网上图书管理系统的…

【31-业务开发-基础业务-品牌管理-级联类别信息业务功能实现-品牌管理和商品分类管理俩者业务关联出现数据冗余,导致数据不同步的问题-开启事务-项目测试】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

进 4 球得 1 分,阿根廷败北背后的科技与狠活

内容一览&#xff1a;11 月 22 日&#xff0c;世界杯 C 组首场比赛&#xff0c;沙特阿拉伯 2:1 反超阿根廷&#xff0c;今天我们将逐一盘点阿根廷进 4 球得 1 分背后的科技与狠活。 关键词&#xff1a;世界杯 VAR 半自动越位技术 沙特爆冷逆袭&#xff0c;2:1 反超阿根廷 2022…

如何改进企业旧式工时管理系统?

工时管理系统对企业很重要&#xff0c;特别是那些不太明显的知识性工作的企业。 一些企业仍在使用基于纸张的工时表管理&#xff0c;这通常会带来以下问题&#xff1a; ● 过程非常耗时 ● 人为错误的风险很高 ● 有道德上的漏洞&#xff0c;如同伴帮打卡和时间盗窃 ● 数据处…

【强化学习论文合集】AAAI-2022 强化学习论文合集(附论文链接)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff0c;又称再励学习、评价学习或增强学习&#xff0c;是机器学习的范式和方法论之一&#xff0c;用于描述和解决智能体&#xff08;agent&#xff09;在与环境的交互过程中通过学习策略以达成回报最大化或实现…

【测试沉思录】16. 性能测试中的系统资源分析之三:磁盘

作者&#xff1a;马海琴 编辑&#xff1a;毕小烦 三. 磁盘 磁盘是可以持久化存储的设备&#xff0c;根据存储介质的不同&#xff0c;常见磁盘可以分为两类&#xff1a;机械磁盘和固态磁盘。磁盘就像人的大脑皮层&#xff0c;负责数据的储存、记忆。 磁盘对于服务器来说十分重…

大学生静态HTML网页源码——佛山旅游景点介绍网页代码 家乡旅游网页制作模板 web前端期末大作业

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

学生个人网页模板 简单个人主页--贝聿铭人物介绍 6页带表单 带报告3800字

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | ‍个人博客网站 | ‍个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业…

c语言:初识指针(二)

初识指针一.野指针1.野指针形成原因一是&#xff1a;未初始化2.野指针形成原因二&#xff1a;指针越界3.野指针形成原因三&#xff1a;指针所指向的内存空间被释放二.指针的运算1.指针-整数运算2.指针-指针3.指针的关系运算三.指针和数组四.二级指针五.指针数组1.定义2.用一维数…

APS生产计划排产在装备制造业的应用

装备制造业是对所有为国民经济各部门的简单再生产和扩大再生产提供技术装备的制造工业的总称&#xff0c;范围包括航空、航天、军工制造&#xff1b;民用飞机、铁路、船舶、汽车等先进交通运输设备制造&#xff1b;石油、矿产、化工、压力容器、电力成套设备制造&#xff1b;以…

Jaya算法在电力系统最优潮流计算中的应用(创新点)【Matlab代码实现】

目录 1 概述 2 数学模型 2.1 目标函数 2.2 约束条件 2.3 Jaya 算法 3 仿真结果 4 Matlab代码实现 1 概述 最优潮流计算与电力系统的稳定、经济运行密切相关&#xff0c;自20世纪60年代提出最优潮流的概念&#xff0c;大量学者相继提出了各种优化技术来求解电力系统的最…

Google Earth Engine(GEE)—— 多光谱指数整合中推导出湿地覆盖类型 (WCT)

湿地覆盖被定义为归因于植被、浑浊度、含水土壤和水量等潜在生物物理条件的湿地空间均匀区域。在这里,我们提出了一种新方法来导出湿地覆盖类型 (WCT),该方法结合了三个常用的多光谱指数 NDVI、MNDWI 和 NDTI,位于印度各地不同地貌和气候环境的三个大型拉姆萨尔湿地。这些湿…

【CNN】SENet——将注意力机制引入通道维度

前言 SENet&#xff0c;胡杰&#xff08;Momenta&#xff09;在2017.9提出&#xff0c;通过显式地建模卷积特征通道之间的相互依赖性来提高网络的表示能力&#xff0c;即&#xff0c;通道维度上的注意力机制。SE块以微小的计算成本为现有的最先进的深层架构产生了显著的性能改…