代码随想录算法训练营第七天

● 自己看到题目的第一想法

第454题.四数相加II

  1. 方法:
    方法一: 暴力法 思路:

  2. 注意:

  3. 代码:

class Solution {
public:
   int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
       int res = 0;
       for(int i=0;i<nums1.size();i++){
           for(int j = 0; j<nums2.size();j++){
               for(int m = 0; m<nums3.size();m++ ){
                   for(int n = 0; n<nums4.size(); n++){
                       if(nums1[i]+nums2[j]+nums3[m]+nums4[n] == 0){
                           res++ ;
                       }
                   }
               }
           }
       }
       return res;
   }
};
  1. 运行结果:
    在这里插入图片描述

  2. 方法:
    方法二: 哈希 思路:

    1. 定义unprdered_map<int, int>map;  //key指两数之和,  value指两数之和出现的次数
    2. 将nums1与nums2之和放入map中;
    3. 求nums3与nums4之和,
    4. 在map中查找 -(nums3+nums4),若能找到则输出res+=map[-(nums3+nums4)]
    5. 最终返回 res;
    
  3. 注意:

  4. 代码:

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++){
               map[nums1[i]+nums2[j] ]++;
              
           }
       }
        
       int res= 0;
       for(int k = 0; k<nums3.size(); k++){
           for(int l = 0; l< nums4.size(); l++){
               if(map.find(-(nums3[k]+nums4[l])) !=map.end()){
                   res += map[-(nums3[k]+nums4[l])];
                   // cout<<res<<endl;
               }
           }
       }
       return res;
   }
};

在这里插入图片描述

383. 赎金信

  1. 方法: 哈希 思路:

    1. 定义一个数组大小为26,初始值为0;
    2. 遍历magazine  将每个字符放入  数组中;
    3. 遍历ransomNote   在其中查找 是否有magazine  中的字符
    4. 如果发现 ransomNote中存在某个英文字母   的统计次数大于 magazine 中该字母统计次数,则此时我们直接返回 false。
    
  2. 注意:

  3. 代码:

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        vector<int>record(26,0);
        for(auto& i: magazine){
            record[i-'a']++;
        }
        for(char i =0; i<ransomNote.size(); i++){
            record[ransomNote[i]-'a']--;
            if(record[ransomNote[i]- 'a'] < 0){
                return false;
            }
        }

        return true;
    }
};

在这里插入图片描述

15. 三数之和

去重的代码:暴力法:


class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>>res;
        
        for(int i=0;i<nums.size(); i++){
            for(int j=i+1; j<nums.size(); j++){
                for(int k=j+1; k<nums.size(); k++){
                    if(nums[i]+nums[j]+nums[k]==0){
                        vector<int>n ={nums[i], nums[j], nums[k]};
                          res.push_back(n);
                         
                    }
                }
            }
        }
         return res;
    }
};

在这里插入图片描述

  1. 方法: 排序+双指针:

在这里插入图片描述

  1. 注意:

     1. 找到三数之和为0,必须先对left  与right去重后  left 与right 再分别向前  与后移动
     2. 需要分别对  i, left, right  去重
    
  2. 代码:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>>res;
        sort(nums.begin(), nums.end());
        for(int i=0; i<nums.size(); i++){
            if(i>0 && nums[i]==nums[i-1]){continue;}
            // if (nums[i] > 0) {
            //     return res;
            // }
            int left= i+1;
            int right =nums.size()-1;
            while(left<right){
                if(nums[left]+nums[right]+nums[i]<0){
                    left++;
                }else if(nums[left]+nums[right]+nums[i]>0){
                    right--;
                }else{
                    res.push_back(vector<int>{nums[i], nums[left], nums[right]});
                    // left++;
                    // right--;
                    while(left<right && nums[left]== nums[left+1]){left++;}
                    while(left<right && nums[right] == nums[right-1]){right--;}
                    left++;
                    right--;
                }
            }
        }
        return res;
    }
};

在这里插入图片描述

18. 四数之和

  1. 方法: 排序+双指针:

  2. 注意: 一定要加(long),否则会溢出

  3. 代码:

class Solution {
public:
   vector<vector<int>> fourSum(vector<int>& nums, int target) {
      vector<vector<int>>res;
       sort(nums.begin(), nums.end());
       
       for(int i=0;i<nums.size(); i++){
           if(nums[i]>target && nums[i]>=0){break;}  //一级剪枝
           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;} //二级剪枝
               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[left]+nums[right]+nums[i]+nums[j]<target){left++;}
                   else if((long)nums[left]+nums[right]+nums[i]+nums[j]>target){right--;}
                   else{
                       res.push_back(vector<int>{nums[i], nums[j], nums[left], nums[right]});
                       while(left<right && nums[left] == nums[left+1]){left++;}
                       while(left<right && nums[right] == nums[right-1]){right--;}
                       left++;
                       right--;
                   }
               }
           }
       }
       return res;
   }
};

在这里插入图片描述

没有加(long)的结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBlade CVE-2022-27360 export-user SQL 注入漏洞分析

漏洞描述 SpringBlade是一个基于Spring Cloud和Spring Boot的开发框架&#xff0c;旨在简化和加速微服务架构的开发过程。它提供了一系列开箱即用的功能和组件&#xff0c;帮助开发人员快速构建高效可靠的微服务应用。该产品/api/blade-user/export-user接口存在SQL注入。 漏…

探索Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式

目录 前言一、 单机模式二、 伪分布式模式三、 完全分布式模式&#xff08;重点&#xff09;3.1 准备工作3.2 配置集群3.2.1 配置core-site.xml 文件3.2.2 配置hdfs-site.xml 文件3.2.3 配置yarn-site.xml 文件3.2.4 配置mapred-site.xml 文件 3.3 启动集群3.3.1 配置workers3.…

神经网络系列---卷积

文章目录 卷积神经网络卷积转置卷积 卷积核和反卷积的三种实现方式卷积的次数计算 卷积神经网络 在神经网络的卷积层中&#xff0c;向下取整&#xff08;Floor&#xff09;是一种常用的策略&#xff0c;特别是在处理输出尺寸不是整数的情况时。当你计算出卷积层输出的尺寸&…

【 10X summary report】怎么看?详细解读笔记

报告内容 在开始正式的分析之前&#xff0c;需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告&#xff0c;在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…

李沐动手学习深度学习——3.1练习

字写的有点丑不要介意 由于公式推导烦的要死&#xff0c;所以手写形式&#xff0c;欢迎进行讨论&#xff0c;因为我也不知道对错

2024最新AI系统ChatGPT网站源码, AI绘画系统

一、前言说明 R5Ai创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GP…

lua调用C++函数

第一步搭建lua的环境. win10 lua环境搭建-CSDN博客 我使用的环境是win10vs2015lua54 先来个最简单的lua调用C函数, 无参数无返回值的 第一步:定义C函数. int CTest(lua_State* L) // 返回值是固定的int类型,返回0表示没有返回参数,返回1表示有一个返回参数 {std::cout &l…

模型部署 - BevFusion - (1) - 思路总结

模型部署实践 - BevFusion 思路总结一、网络结构 - 总结1.1、代码1.2、网络流程图1.3、模块大致梳理 二、Onnx 的导出 -总体思路分析三、优化思路总结 学习 BevFusion 的部署&#xff0c;看了很多的资料&#xff0c;这篇博客进行总结和记录自己的实践 思路总结 对于一个模型我…

自学高效备考2025年AMC8数学竞赛:2000-2024年AMC8真题解析

今天继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。下面的五道题目如果你能在8分钟内做对&#xff08;主要结果对&#xff0c;无需过程&…

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…

Vue前端+快速入门【详解】

目录 1.Vue概述 2. 快速入门 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript开发存在的问题&#xff1a;操作麻烦&#xff0c;耦合性强 为了实现html标签与数据的解耦&#xff0c;前端开发中提供了MVVM思想&#xff1a;即Model-Vi…

Spring框架精髓:带你手写IoC

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

巧用二进制实现俄罗斯方块小游戏

效果预览 思想 首先建立两个数组board、tetris用来存储当前已经堆积在棋盘的方块与正在下落的方块。 这两个是一维数组当需要在页面画棋盘时就对其每一项转成二进制&#xff08;看计算属性tetrisBoard&#xff09;&#xff0c;其中1&#xff08;红色&#xff09;0&#xff08;…

python celery beat实现定时任务

在Celery在python中的应用除了实现异步任务&#xff08;async task)外也可以执行定时任务(beat) 1.Celery定时任务是什么&#xff1f; Celery默认任务单元由任务生产者触发,但有时可能需要其自动触发, 而beat进程正是负责此类任务,能够自动触发定时/周期性任务. 只需要在配置…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch&#xff0c;导致的只有cpu在跑&#xff0c;显卡没跑 这就是很典型的。 解决方案 第一步&#xff1a;安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装&#xff0c;一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…

NoSQL--2.MongoDB配置

目录 2.MongdoDB配置 2.1 Windows环境下操作 2.1.1 注册MongDB Atlas&#xff1a; 2.1.2 MongoDB Community Server Download&#xff1a; 2.1.3 启动MondgoDB服务&#xff1a; 2.1.3.1 命令行参数的方式启动MongoDB服务&#xff1a; 2.1.3.2 使用配置文件方式启动Mongo…

游戏框架搭建

使用框架的目标&#xff1a;低耦合&#xff0c;高内聚&#xff0c;表现和数据分离 耦合&#xff1a;对象&#xff0c;类的双向引用&#xff0c;循环引用 内聚&#xff1a;相同类型的代码放在一起 表现和数据分离&#xff1a;需要共享的数据放在Model里 对象之间的交互一般有三…

如何使用恢复软件恢复删除的文件?回收站文件恢复攻略

随着计算机在日常生活中的普及&#xff0c;文件的管理和存储成为我们不可或缺的技能。在Windows操作系统中&#xff0c;回收站作为一个帮助我们管理文件删除的重要工具&#xff0c;在误删了一些重要文件之后&#xff0c;我们可能会因为找不到回收站中恢复的文件而感到困惑。本文…

革命文物的新征程:SpringBoot实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…