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

news2024/9/25 13:23:02

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

第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)的结果
在这里插入图片描述

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

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

相关文章

ABB眼中AI推动机器人创新的三大方向

文 | BFT机器人 ABB的历史是一部充满革新与进步的史诗&#xff0c;它的机器人篇章始于1974年&#xff0c;那一年它向世界推出了被誉为“全球首个商用全电动机器人”的IRB 6。时隔半个世纪&#xff0c;ABB的机器人产品线已变得无比强大和多元&#xff0c;囊括了先进的工业机械臂…

OpenAI 与开源多语言嵌入模型

原文地址&#xff1a;OpenAI vs Open-Source Multilingual Embedding Models 选择最适合您的数据的模型 2024 年 2 月 25 日 OpenAI最近发布了他们的新一代embedding模型&#xff0c;称为embeddingv3&#xff0c;他们描述是他们性能最好的embedding模型&#xff0c;具有更高…

MySQL8安装切换密码验证方式

一、MySQL8中新增了一种密码验证方式&#xff1a;caching_sha2_password&#xff0c;如果安装时选择了如下方式&#xff1a; 则数据库使用新的caching_sha2_password密码验证方式。 二、如果安装时选择了caching_sha2_password验证方式&#xff0c;而安装后想发回传统的mysql_…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Redis7.2.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

Power BI vs Superset BI 调研报告

调研结论 SupersetPower BI价格开源①. Power BI Pro 每人 $10/月($120/年/人) ②. Power BI Premium 每人 $20/月($240/年/人) ③. Power BI Embedded:4C10G $11W/年 权限基于角色的访问控制,支持细粒度的访问: 表级别、库级别、图表级别,看板级别,用户级别 基于角色…

VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行

VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行功能&#xff0c;即滚动 UI 显示当前源代码范围。便于在代码行数比较多的时候更好的知道自己所在的位置。粘性滚动UI 显示用户在滚动期间所处的范围&#xff0c;将显示编辑器顶部所在的类/接口/命名空间/函数/方法/构造函数&a…

JavaScript之引用类型

系列文章目录 文章目录 系列文章目录前言一、Object类型二、Array类型三、Date类型四、Function类型五、内置对象 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文…

C++ opencv 学习

文章目录 1、创建窗口2、读取图片3、视频采集4、Mat的使用5、异或操作6、通道分离&#xff0c;通道合并7、色彩空间转换8、最大值、最小值9、绘制图像10、多边形绘制11、随机数12、鼠标实时绘制矩形13、归一化14、resize操作15、旋转翻转16、视频操作17、模糊操作18、高斯模糊操…

ONLYOFFICE文档8.0全新发布:私有部署、卓越安全的协同办公解决方案

ONLYOFFICE文档8.0全新发布&#xff1a;私有部署、卓越安全的协同办公解决方案 文章目录 ONLYOFFICE文档8.0全新发布&#xff1a;私有部署、卓越安全的协同办公解决方案摘要&#x1f4d1;引言 &#x1f31f;正文&#x1f4da;一、ONLYOFFICE文档概述 &#x1f4ca;二、ONLYOFFI…

字符串之manacher(马拉车)算法

这个算法用途就是查找字符串内的最长回文串 正常情况下&#xff0c;我们查找回文序列&#xff0c;会去用双指针比较&#xff0c;这样的话数据大的时候&#xff0c;时间复杂度就上去了&#xff0c;其实这个马拉车算法和kmp算法的一部分是有些相像的&#xff0c;建议先看我的上篇…

00X集——acdbpolyline与acdb2dpolyline区别

下图中选择的线为通过ThisDrawing.ModelSpace.AddPolyline(points)创建的&#xff0c;包含2个点 通过代码查询objectname,如下图acdb2dpolyline ObjectARX 中提供了三种多段线的相关类:AcDbPolyline 、AcDb2dPolyline 和 AcDb3dPolyline 。其中&#xff0c;利用AutoCAD 的内部…

【Java项目介绍和界面搭建】拼图小游戏——打乱图片顺序

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

现代化数据架构升级:毫末智行自动驾驶如何应对年增20PB的数据规模挑战?-OceanBase案例

毫末智行是一家致力于自动驾驶的人工智能技术公司&#xff0c;其前身是长城汽车智能驾驶前瞻分部&#xff0c;以零事故、零拥堵、自由出行和高效物流为目标&#xff0c;助力合作伙伴重塑和全面升级整个社会的出行及物流方式。 在自动驾驶领域中&#xff0c;是什么原因让毫末智行…

力扣601 体育馆的人流量

在解决"连续三天及以上人流量超过100的记录"问题时&#xff0c;MySQL方案作为力扣解决问题的方案通过窗口函数和分组技巧高效地识别连续记录。而Python与Pandas方案作为扩展则展示了在数据处理和分析方面的灵活性&#xff0c;通过行号变换和分组计数来筛选符合条件的…

unity学习(46)——服务器三次注册限制以及数据库化角色信息1--数据流程

1.先找到服务器创建角色信息代码的位置&#xff0c;UserBizImpl.cs中&#xff1a; public PlayerModel create(string accId, string name, int job) {PlayerModel[] playerModelArray this.list(accId);//list是个自建函数&#xff0c;本质通过accId来查询if (playerModelAr…

【机器人最短路径规划问题(栅格地图)】基于模拟退火算法求解

代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 基于模拟退火算法求解机器人最短路径规划问题&#xff08;栅格地图&#xff09;的仿真结果 仿真结果&#xff1a; 初始解的路径规划图 收敛曲线&#xff1a; 模拟退火算法求解的路径规划图 结论&#xff…

笨办法学 Python3 第五版(预览)(一)

原文&#xff1a;Learn Python the Hard Way, 5th Edition (Early Release) 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 模块 1&#xff1a;Python 入门 练习 0&#xff1a;准备工作 这个练习没有代码。这只是你完成的练习&#xff0c;让你的计算机运行 Python。…

视频编码面试基础题

视频基础知识&#xff1a; RGB彩色原理&#xff1a; RGB是指光学三原色红、绿和蓝&#xff0c;通过这3种的数值&#xff08;0-255&#xff09;改变可以组成其他颜色&#xff0c;全0时为黑色&#xff0c;全255时为白色。RGB是一种依赖于设备的颜色空间&#xff1a;不同设备对特定…

非阻塞IO:提高应用程序的效率与性能

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

[unity]lua热更新——个人复习笔记【侵删/有不足之处欢迎斧正】

一、AssetBundle AB包是特定于平台的资产压缩包&#xff0c;类似于压缩文件 相对于RESOURCES下的资源&#xff0c;AB包更加灵活轻量化&#xff0c;用于减小包体大小和热更新 可以在unity2019环境中直接下载Asset Bundle Browser 可以在其中设置关联 AB包生成的文件 AB包文件…