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

news/2024/7/7 21:34:12/文章来源:https://www.cnblogs.com/zhuyishao/p/18284412

454题拆成两块 各自匹配 化成两个O(n^2)运算

 1 class Solution {
 2 public:
 3     int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
 4         //四个数组拆分成两块 两块 
 5         unordered_map<int,int> sum;
 6         int ans = 0;
 7         for (int n1:nums1) {
 8             for (int n2:nums2) {
 9                 sum[n1+n2]++;
10             }
11         }
12         for (int n3:nums3) {
13             for (int n4:nums4) {
14                 if (sum.find(0-n3-n4) != sum.end()) {
15                     ans += sum[0-n3-n4];//加上这个要求的次数 
16                 }
17             }
18         }
19         return ans;
20     }
21 };

383题笨方法 统计 计数

 1 class Solution {
 2 public:
 3     bool canConstruct(string ransomNote, string magazine) {
 4         unordered_map<char, int> charCount;
 5         for (char t:ransomNote) {
 6             charCount[t]--;
 7         }
 8         for (char s:magazine) {
 9             charCount[s]++;
10         }
11         for (char ch = 'a'; ch <= 'z'; ++ch) {
12             if (charCount[ch] < 0) {
13                 return false;
14             }
15         }
16         return true;
17     }
18 };

15题琢磨了很久 哈希表法太容易超时了 还得是双指针法啊

 1 //上来就三重循环 有点难绷得住
 2 //那不能三重循环 直接空间换时间?
 3 //第一遍 遍历 我按下标存放
 4 class Solution {
 5 public:
 6     vector<vector<int>> threeSum(vector<int>& nums) {
 7         vector<vector<int>> ans;
 8         unordered_map<int, vector<pair<int, int>>> myMap;
 9 
10         // 构建哈希表,存储所有满足条件的 (i, j) 组合
11         for (int i = 0; i < nums.size(); ++i) {
12             for (int j = i + 1; j < nums.size(); ++j) {
13                 int sum = nums[i] + nums[j];
14                 myMap[sum].push_back({i, j});
15             }
16         }
17 
18         // 查找满足条件的三元组 (i, j, k)
19         for (int k = 0; k < nums.size(); ++k) {
20             int target = 0 - nums[k];
21 
22             if (myMap.find(target) != myMap.end()) {
23                 for (auto& pair : myMap[target]) {
24                     int i = pair.first;
25                     int j = pair.second;
26                     if (k != i && k != j) {
27                         vector<int> triplet = {nums[i], nums[j], nums[k]};
28                         sort(triplet.begin(), triplet.end());
29                         ans.push_back(triplet);
30                     }
31                 }
32             }
33         }
34 
35         // 使用 set 去重
36         set<vector<int>> unique_ans(ans.begin(), ans.end());
37         ans.assign(unique_ans.begin(), unique_ans.end());
38 
39         return ans;
40     }
41 };
42 //辛辛苦苦写的哈希算法 直接超时 好好好好 换到双指针法
 1 class Solution {
 2 public:
 3     vector<vector<int>> threeSum(vector<int>& nums) {
 4         vector<vector<int>> ans;
 5         sort(nums.begin(), nums.end());
 6         int n = nums.size();
 7         for (int i = 0; i < n - 2; ++i) {
 8             if (i > 0 && nums[i] == nums[i - 1]) continue; // 跳过重复的元素
 9 
10             int left = i + 1;
11             int right = n - 1;
12             while (left < right) {
13                 int sum = nums[i] + nums[left] + nums[right];
14                 if (sum == 0) {
15                     ans.push_back({nums[i], nums[left], nums[right]});
16                     while (left < right && nums[left] == nums[left + 1]) left++; // 跳过重复的元素
17                     while (left < right && nums[right] == nums[right - 1]) right--; // 跳过重复的元素
18                     left++;
19                     right--;
20                 } else if (sum < 0) {
21                     left++;
22                 } else {
23                     right--;
24                 }
25             }
26         }
27  
28     // sort(ans.begin(), ans.end());
29     // ans.erase(unique(ans.begin(), ans.end()), ans.end());
30     //这个去重操作要好好学学  不用学了 多余的 
31     return ans;
32     }
33 };

18题就是15题套皮 多加一层循环

 1 class Solution {
 2 public:
 3     vector<vector<int>> fourSum(vector<int>& nums, int target) {
 4         //可不可以在三数之和基础上加一层循环
 5         vector<vector<int>> ans;
 6         sort(nums.begin(), nums.end());
 7         int n = nums.size();
 8         
 9         for (int i = 0; i < n - 3; ++i) {
10             if (i > 0 && nums[i] == nums[i - 1]) continue; // 跳过重复的元素
11             
12             for (int j = i + 1; j < n - 2; ++j) {
13                 if (j > i + 1 && nums[j] == nums[j - 1]) continue; // 跳过重复的元素
14                 
15                 int left = j + 1;
16                 int right = n - 1;
17                 
18                 while (left < right) {
19                     long long sum = static_cast<long long>(nums[i]) + nums[j] + nums[left] + nums[right];
20                     if (sum == target) {
21                         ans.push_back({nums[i], nums[j], nums[left], nums[right]});
22                         while (left < right && nums[left] == nums[left + 1]) left++; // 跳过重复的元素
23                         while (left < right && nums[right] == nums[right - 1]) right--; // 跳过重复的元素
24                         left++;
25                         right--;
26                     } else if (sum < target) {
27                         left++;
28                     } else {
29                         right--;
30                     }
31                 }
32             }
33         }
34         
35         return ans;
36     }
37 };

许久没跟着刷题了,不说了 开工!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验

第九章 打印输出实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DN…

分享一款可编辑本地电脑文件的在线编辑器

之前见过在线版的VSCode,被惊讶到了。网页上竟然可以编辑电脑本地的文件,打破了网页无法编辑本地电脑文件的限制。一直好奇怎么做的。抽空研究了一下,然后发现其实也不难。背景 之前见过在线版的VSCode,被惊讶到了。网页上竟然可以编辑电脑本地的文件,打破了网页无法编辑本…

xhcms

xhcms 目录结构 admin --管理后台文件夹 css --存放css的文件夹 files --存放页面的文件夹 images --存放图片的文件夹 inc --存放网站配置文件的文件夹 install --网站进行安装的文件夹 seacmseditor --编辑器文件夹 templ…

lrzsz安装完成后rz乱码

rz选择文件夹后乱码传输不到linux里面, 这时候只需要rz -be再选择文件 这样就可以进行后续的解压了tar -zxvf jdk-8u65-linux-x64.tar.gz

椭流线法设计配光器

本文介绍了利用椭流线法设计高效均匀的LED配光器,通过对边光原理、反射定律及椭圆几何特性的深入分析,结合Matlab和SolidWorks软件实现光学仿真,最终成功设计出接收效率高、均匀度优的配光器。椭流线法设计配光器 椭流线法设计配光器 一、设计原理 1、边光原理 边光原理是非…

wx云开发增删改查

首先是.wxml文件,此处为固定数据的新增<button type="primary" bind:tap="addData"> //调用.js中addData方法插入数据 </button>对应.js文件//添加数据addData(){wx.showLoading({ //showLoading(api接口)(防止用户多次…

剪裁法设计配光器

剪裁法设计配光器通过光源角分割和目标面分割,利用边光原理和反射定律,计算并构建光学母线,以实现高均匀度和高光效的均匀圆斑光学设计。剪裁法设计配光器 剪裁法设计配光器 一、设计原理边光原理 边光原理是非成像光学中的一个基础原理,其内容可以表述为:来自光源边缘的光…

iOS-列表视图

在iOS开发中,UITableView和UICollectionView是两个非常核心的用于展示集合数据的UI组件。它们都能以列表的形式展示数据,但各自的特点和使用场景有所不同。 UITableView UITableView用于展示和管理垂直滚动的单列数据列表。它是以行的形式展示数据,每行(cell)可以展示相同…

CPC配光系统设计

本文详细介绍了CPC(复合抛物线聚光器)配光系统的设计过程,包括设计原理、抛物流线几何特性及其设计要求和流程,并通过Matlab和SolidWorks绘制模型,最后在TracePro中进行仿真验证,确保系统满足均匀照度和高效接收率的目标。CPC配光系统设计 CPC配光系统设计 一、设计原理 …

VMware vSphere Tanzu部署_14_部署容器应用

1.部署运行容器应用 1.1. 登录tkc集群 jianhua@napp:~/tkc$ kubectl vsphere login --server=192.168.203.194 \ --tanzu-kubernetes-cluster-name tkc-dev-cluster \ --tanzu-kubernetes-cluster-namespace tkc-01 \ --vsphere-username administrator@vsphere.local \ --ins…

贝塞尔曲线原理、推导及Matlab实现

本文详细解析了贝塞尔曲线的定义、性质、构建方法以及多种阶数的推导公式,并提供了完整的Matlab代码用于绘制和计算贝塞尔曲线。贝塞尔曲线原理、推导及Matlab实现 贝塞尔曲线原理、推导及Matlab实现 一、简介 贝塞尔曲线提出 在数学的数值分析领域中,贝塞尔曲线(English:B…

刘积仁的大健康“长跑”

软件是一个长命的产业,但软件企业的寿命都很短。懂得怕死,才能有机会活得长久。 这一次,刘积仁又为东软医疗找到了强大助力!中国通用技术(集团)控股有限责任公司(以下简称通用技术集团)所属资本公司战略投资东软集团在医疗健康领域资的创新业务公司——东软医疗,双方也由…

【AppStore】一文让你学会IOS应用上架Appstore

咱们国内现在手机分为两类,Android手机与苹果手机,现在用的各类APP,为了手机的使用安全,避免下载到病毒软件,官方都极力推荐使用手机自带的应用商城进行下载,但是国内Android手机品类众多,手机商城各式各样,做不到统一,所以Android的APP上架得一个一个平台去申请上架,…

关于airtest生成的报告中缺少poco语句问题

1、airtest生成的报告只显示airtest的相关操作,如果是poco和airtest-selenium的操作则不记录。因此需要在报告中引用插件。支持poco语句插件,poco.utils.airtest.report 支持airtest-selenium语句插件,airtest_selenium.report2、在IDE运行 .py 脚本报告生成的依据是脚本运行…

xshell7的下载ssh远程连接

1.下载地址家庭/学校免费 - NetSarang Website (xshell.com) 2.下载后一路next,来到主页面,我们来连接一下试一试吧,这里主机就是ifconfig得到的 3.用户名一般都是root密码是自己设置的那个 4.连接的时候注意比如我要连接Node1那么node1就要保持开启并却防火墙已经关闭 5.看一…

xhcms1.0

xhcms1.0 目录结构 admin --管理后台文件夹 css --存放css的文件夹 files --存放页面的文件夹 images --存放图片的文件夹 inc --存放网站配置文件的文件夹 install --网站进行安装的文件夹 seacmseditor --编辑器文件夹 te…

关于巴图自动化Profinet协议转Modbus协议网关模块怎么配置IP地址教学

Profinet协议和Modbus协议是工业通讯常用协议,通过巴图自动化PN转Modbus网关模块(BT-MDPN10)实现连接。常见的协议有:ModbusTCP协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议,CAN,CANOPEN等Profinet协议和Modbus协议是工业领域中常用的两种通讯协议,…

基础篇:Stable Diffusion 基础原理详述

【基础篇】Stable Diffusion 基础原理详述前言我认为学习 ComfyUI 应该先从理论学起。与传统绘图工具(如 Photoshop 或 Figma)相比,AI 绘图工具有着显著不同。首先,许多设置和操作在 AI 绘图工具中是非可视化的,这意味着即使你更改了某个配置,界面上也未必会有任何变化,…

微信云开发数据库连接

//.js文件const db = wx.cloud.database()Page({//页面的初始数据data: {dataObj:"" //定义对象dataObj}, //查询数据getData(){db.collection("pro1").where({ //pro1为数据库名author:"张三" …