day7 454

news/2026/1/21 20:02:07/文章来源:https://www.cnblogs.com/tomoebzk/p/19513930

Leetcode 454 四数相加Ⅱ

unordered_map使用的练习,一次通过,但是定义了两个unordered_map,并且需要经过两次遍历,空间和时间消耗都增加了

int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<long long ,int>m1;unordered_map<long long ,int>m2;int ans=0;for(int i=0;i<nums1.size();++i){for(int j=0;j<nums2.size();++j){   m1[nums1[i]+nums2[j]]++;}}for(int i=0;i<nums3.size();++i){for(int j=0;j<nums4.size();++j){   m2[nums3[i]+nums4[j]]++;}}for(auto it1:m1){for(auto it2:m2){if(it1.first+it2.first==0){ans+=it1.second*it2.second;}}}return ans;}

看了代码随想录以后才明白一个unordered_map两次遍历就可以了,查找0-(c+d)即可

int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {unordered_map<int, int> umap; //key:a+b的数值,value:a+b数值出现的次数// 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中for (int a : A) {for (int b : B) {umap[a + b]++;}}int count = 0; // 统计a+b+c+d = 0 出现的次数// 再遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就把map中key对应的value也就是出现次数统计出来。for (int c : C) {for (int d : D) {if (umap.find(0 - (c + d)) != umap.end()) {count += umap[0 - (c + d)];}}}return count;}

Leetcode 383 赎金信

本来想采用数组来统计字母出现次数,但是由于ransomNote是magazine的子集,因此不能直接算arr中减为零的字母,考虑到子集的存在,并且magazine中一个字符只能使用一次,因此词用unordered_map<char,int>m统计magazine中字符出现次数,查找ransomNote中字符时,如果没有出现直接返回false,出现一次m[c]--,如果m[c]=0,直接删除该字符的key,如果ransomNote中还有c,那么就表明不能由magazine构成

bool canConstruct(string ransomNote, string magazine) {unordered_map<char,int>m;for(char c:magazine){m[c]++;}for(char c:ransomNote){auto it=m.find(c);if(it==m.end())return false;else{m[c]--;if(m[c]==0){m.erase(c);}}}return true;}

Leetcode 15 三数之和

这道题考虑了一会没想出来怎么做,本来想要通过哈希表统计两两数之和,再计算第三个数,但是发现由于不重复的原因,查重处理起来很麻烦。看了随想录的思路是二分法后,尝试从这个方面进行编写,采用set<vector>check的特性进行去重,将nums排序以后从第一个数字进行遍历,left=i+1,right=nums.size()-1,使用双指针进行处理,nums[i]+nums[left]+nums[right]<0,left++;nums[i]+nums[left]+nums[right]>0,right--。查找到满足条件的结果后left++。

vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>>ans;set<vector<int>>check;ranges::sort(nums);int left=0;int right=nums.size()-1;for(int i=0;i<nums.size()-2;++i){right=nums.size()-1;left=i+1;while(left<right){if(nums[i]+nums[left]+nums[right]<0){left++;continue;}else if(nums[i]+nums[left]+nums[right]>0){right--;continue;}check.insert({nums[i],nums[left],nums[right]});left++;}}set<vector<int>>::iterator it;for(it=check.begin();it!=check.end();++it){ans.push_back(*it);}return ans;}

Leetcode 18 四数之和

模仿三数之和进行,依然采用set<vector>check进行去重,依然排序nums,确定前两个数的基础上对后两个数采用双指针遍历,

vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>>ans;set<vector<int>>check;if(nums.size()<4) {return ans;}ranges::sort(nums);for(int i=0;i<nums.size()-3;++i){if(nums[i]>target&&nums[i]>=0){break;}//转化为三数之和for(int j=i+1;j<nums.size()-2;++j){int left=j+1;int right=nums.size()-1;while(left<right){if((long)nums[i]+nums[j]+nums[left]+nums[right]<target){left++;}else if((long)nums[i]+nums[j]+nums[left]+nums[right]>target){right--;}else {check.insert({nums[i],nums[j],nums[left],nums[right]});left++;right--;}}}}set<vector<int>>::iterator it;for(it=check.begin();it!=check.end();++it){ans.push_back(*it);}return ans;}

运行结果不出所料地拉跨,执行用时和内存消耗双双垫底。

看了看随想录的代码。发现自己有对很多无关情况都进行了处理,例如nums[i]>target时,已经做不到=target,不需要考虑后面的数。由于对nums进行了排序,相邻的数字如果相等的话也不需要进行循环,直接移动到下一个位置即可,例如left增加过程中相同的nums[left]无需重复考虑

if (nums[k] > target && nums[k] >= 0) {break; // 这里使用break,统一通过最后的return返回}// 对nums[k]去重if (k > 0 && nums[k] == nums[k - 1]) {continue;}
while (right > left && nums[right] == nums[right - 1]) right--;
while (right > left && nums[left] == nums[left + 1]) left++;

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

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

相关文章

CF1716D 题解

Codeforces 1716D Chip Move 题解 此文章已同步在洛谷上更新 题目大意 洛谷题面 如果想看英文题面请去 CF 给定两个数 \(n,k\),问从 \(0\) 开始,第 \(i\) 步只能走 \((k+i-1)\) 的正倍数(即不能走 \(0\)),问分别走…

[Windows] 文件名精灵2025 批量修改文件名工具

[Windows] 文件名精灵2025 批量修改文件名工具 链接&#xff1a;https://pan.xunlei.com/s/VOjVKTcShvWTz972rnxzJB_RA1?pwdvywy# 在日常办公和文件管理中&#xff0c;批量修改文件名是高频需求&#xff0c;而一款高效、功能全面的工具能大幅提升效率。文件名精灵 2025 作为…

2025秋 别样的挂分大战

09.06 先开 T1,发现把每个特殊串离散化完了再直接做 LIS 板子就是 \(O(n^2)\),光速写完。 开 T2,发现是最优化,扫了一眼数据范围,感觉很贪心,但是不太会所以跳了。 开 T3,这不是建完前缀和再直接用树状数组做二…

PCIe从入门到精通之十八:PCIe设备的初始化枚举过程2

0&#xff0c;引言 在上一篇文章《PCIe从入门到精通之十七&#xff1a;PCIe设备的初始化枚举过程1》中&#xff0c;我们介绍了PCIe设备的初始化枚举过程一些概念.这一篇我们将具体介绍PCIe设备的初始化枚举一步一步的动态过程&#xff0c;以及Primary Bus Number Register&…

CF1615B 题解

Codeforces 1615B And Its Non-Zero 题解 题目传送门: 洛谷 CF 思路 暴力思路 要让所有元素按位与的结果不为 \(0\),就要让所有元素在二进制的某一位都为 \(1\)。 所以我们可以枚举每个二进制位,看看有几个 \(0\),…

1.hello驱动

1.怎么写驱动程序确定主设备号 定义自己的file_operations结构体 实现对应的open/read/write等函数,填入file_operations结构体 把file_operations结构体告诉内核:注册驱动程序(register_chrdev(major, file_operat…

2025冬 超级无敌挂分大王

11.12 分层测试~ 开 T1,MST 板题?写了一下,最后用大法师求根到点的边权和。炸。瞎改了一堆。炸炸炸。 无语,滚去 T2。怎么是类 CSPS T1,瞎猜了个基于优先队列的贪心,因为不会写堆所以改写线段树,胡写了一下,大…

文科核心期刊发表指南:AI助力高效投稿

8大文科论文查重工具核心对比 排名 工具名称 查重准确率 数据库规模 特色功能 适用场景 1 Aicheck 98% 10亿文献 AI降重、AIGC检测 初稿查重与修改 2 Aibiye 96% 8亿文献 智能改写、格式调整 终稿精细优化 3 秒篇 95% 6亿文献 一键生成降重报告 快速查…

Agentic-KGR:多智能体强化学习驱动的知识图谱本体渐进式扩展技术

Agentic-KGR是一种通过多轮强化学习驱动的多智能体交互实现知识图谱本体渐进式自进化的技术框架。该框架遵循"提取→暂存→更新→奖励计算→晋升"的闭环流程&#xff0c;依赖LLM的知识发现能力和反馈闭环机制。系统通过多尺度提示压缩、Neo4j数据库管理、分层决策机制…

教师必看!国内发成绩小程序大盘点

教师必看!国内发成绩小程序大盘点引言:成绩发布痛点与小程序崛起 每到期中期末考试结束,便是老师们的 “成绩发布攻坚战”。传统的成绩发布方式,简直是问题百出。手动录入成绩,那密密麻麻的数字,一不留神就可能输…

瞬维智能:房产获客的精准革命,让每一份投入都开出确定的花

在房产行业摸爬滚打的人&#xff0c;都曾经历过这样的时刻&#xff1a;深夜对着电脑屏幕&#xff0c;反复修改房源文案却始终触不到那个“对的人”&#xff1b;或是花费大量人力物力制作的内容&#xff0c;最终却石沉大海&#xff0c;连个水花都没溅起。 瞬维智能的AI获客智能体…

学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机电流环PI参数整定仿真

目录 手把手教你学Simulink 一、引言:为什么“调不好PI”会让高性能电机变成“抖动机器”? 二、核心原理:电流环的“等效传递函数”建模 1. 电流环简化模型(d/q轴解耦后) 2. 数字控制系统中的关键延迟 3. 电流环闭环结构 三、应用场景:伺服驱动器中的高性能电流环设…

稀土合金回收利用:资源闭环新路径,产业盈利与环保双赢

稀土被誉为“现代工业的维生素”,稀土合金更是新能源、航空航天、高端制造领域的核心材料,不可或缺。但原生稀土储量有限、开采污染大,随着全球稀土需求激增,稀土合金回收利用已成为缓解资源缺口、践行双碳目标、提…

P6822 [PA 2012 Finals] Tax 题解

题目大意 可恶,我们老师竟然把紫题放到了模拟赛里。 题目传送门 原题中题意说的很清楚了。 思路 转化问题 首先先新建两条边,使原题点到点的问题转化成边到边的问题。 可以连接一条从 \(0\) 到 \(1\),长度为 \(0\) …

基于Springboot+Vue的校园二手书交易系统(源码+lw+部署文档+讲解等)

课题介绍 本课题针对校园内二手书流转不畅、交易信息分散、供需对接低效、交易安全缺乏保障等痛点&#xff0c;设计并实现基于SpringbootVue的校园二手书交易系统&#xff0c;构建集图书发布、检索匹配、在线沟通、交易履约于一体的数字化校园交易平台。系统以MySQL为数据存储核…

UVA1464 Traffic Real Time Query System 题解

UVA1464 Traffic Real Time Query System 题解 题目大意 题目传送门 给出一张 \(n\) 个点,\(m\) 条边的无向连通图,问从第 \(s\) 条边到第 \(t\) 号边必须经过多少点。题目有多组数据。 思路 转换问题 这道题类似于 …

基于Springboot+Vue的校园家教信息平台的设计开发(源码+lw+部署文档+讲解等)

课题介绍 本课题针对校园内家教供需信息不对称、对接效率低、资质审核缺失、服务质量难保障等痛点&#xff0c;设计并开发基于SpringbootVue的校园家教信息平台&#xff0c;构建集家教信息发布、资质审核、供需匹配、服务跟踪于一体的数字化校园服务平台。系统以MySQL为数据存储…

基于C++的《Head First设计模式》笔记——模式合作

目录 一.专栏简介 二.模式合作 三.与鸭子重聚 1.创建一个Quackable接口 2.鸭子实现Quackable 3.模拟器 四.加上鹅 五.鹅适配器 六.模拟器中加入鹅 七.叫声的统计 八.模拟器加入装饰者 九.工厂生产鸭子 十.模拟器使用工厂 十一.创建一群鸭子 十二.修改模拟器 十三…

B4172 学习计划 题解

B4172 学习计划 题解 思路 可以将收益式子换一下,设 \(c_i\) 为 \(a_i\) 被分到的段的编号,那收益式子变成 \(\sum_{i=1}^n a_i \times b_{c_i}\)。 很显然的 dp, 设 \(f_{i,j}\) 为将 \(a\) 的前 \(i\) 个数分成 \(…

解码AI生态新范式,擘画智能未来新图景

2月23日&#xff0c;以“模塑全球 无限可能”为主题的2025全球开发者先锋大会在上海徐汇圆满落幕。这场汇聚全球智慧的行业盛会&#xff0c;以空前的行业影响力构建起覆盖产学研用全链条的生态体系&#xff0c;成为引领人工智能开源创新与垂类应用落地的风向标。瞬维智能CEO哲西…