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

454.四数相加II

在这里插入图片描述

题目链接: 454.四数相加II
文档讲解:代码随想录
状态:没做出来,没想到考虑重复的情况!

题解:

public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 结果计数器int res = 0;// 临时变量用于存储和int sum = 0;// 用于存储 nums1 和 nums2 各元素和出现次数的哈希表HashMap<Integer, Integer> map = new HashMap<>();// 遍历 nums1 和 nums2 的所有组合for (int n1 : nums1) {for (int n2 : nums2) {// 计算两数之和sum = n1 + n2;// 将和存入哈希表,记录出现的次数. 记录出现的次数是为了处理输入数组中可能包含重复元素的情况。// 假设在 nums1 和 nums2 中有多个元素对 (n1, n2) 其和相同,在 nums3 和 nums4 中也可能有多个元素对 (n3, n4) 其和的负值相同。// 如果和已存在,则次数加1;否则,初始化为1map.put(sum, map.getOrDefault(sum, 0) + 1);}}// 遍历 nums3 和 nums4 的所有组合for (int n3 : nums3) {for (int n4 : nums4) {// 计算两数之和sum = n3 + n4;// 判断哈希表中是否存在与当前和相反的值if (map.containsKey(-sum)) {// 如果存在,则结果计数器增加该和出现的次数res += map.get(-sum);}}}// 返回结果计数器return res;}

383. 赎金信

在这里插入图片描述

题目链接: 383. 赎金信
文档讲解:代码随想录
状态:so easy

题解:

    public boolean canConstruct(String ransomNote, String magazine) {int[] counter = new int[26];char[] mChars = magazine.toCharArray();char[] rChars = ransomNote.toCharArray();for (char mChar : mChars) {counter[mChar - 'a']++;}for (char rChar : rChars) {if (counter[rChar - 'a'] > 0) {counter[rChar - 'a']--;} else {return false;}}return true;}

15. 三数之和

在这里插入图片描述

题目链接: 15. 三数之和
文档讲解:代码随想录
状态:没做出来

思路:
3 <= nums.length <= 3000,所以使用O( n 3 n^3 n3)复杂度的算法会时间超限。
可以考虑使用双指针:首先对数组进行排序,遍历数组时先固定一个数,然后使用双指针方法遍历数组,查找所有和为零的不重复三元组。在遍历过程中,双指针分别从当前元素之后和数组末尾开始,通过调整指针来找到满足条件的三元组,并通过跳过重复元素来避免重复结果。

题解:

    public List<List<Integer>> threeSum(int[] nums) {// 用于存储结果的列表List<List<Integer>> list = new ArrayList<>();// 将数组进行排序Arrays.sort(nums);for (int i = 0; i < nums.length - 2; i++) {// 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了if (nums[i] > 0) {return list;}if (i > 0 && nums[i] == nums[i - 1]) {continue; // 去重,避免重复计算相同的元素}int left = i + 1;int right = nums.length - 1;while (left < right) {int sum = nums[i] + nums[left] + nums[right];if (sum < 0) {left++; // 当前和小于零,左指针右移} else if (sum > 0) {right--; // 当前和大于零,右指针左移} else {list.add(Arrays.asList(nums[i], 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 list;}

18. 四数之和

在这里插入图片描述

题目链接:18. 四数之和
文档讲解:代码随想录
状态:各种细节问题没处理好

题解:

    public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);for (int i = 0; i < nums.length; i++) {//注意:两个负数相加可以变得更加小,所以不能num[i]>target就break;所以使用nums[i]>0再剪枝if (nums[i] > 0 && nums[i] > target)return result;if (i > 0 && nums[i] == nums[i - 1]) {//i > 0防止下标越界continue; // 去重,避免重复计算相同的元素}for (int j = i + 1; j < nums.length; j++) {//二次剪枝if (nums[i] + nums[j] > target && target > 0)break;//j > i + 1if (j > i + 1 && nums[j] == nums[j - 1]) {continue; // 去重,避免重复计算相同的元素}int left = j + 1, right = nums.length - 1;while (left < right) {int sum = nums[i] + nums[j] + nums[left] + nums[right];if (sum < target) {left++;} else if (sum > target) {right--;} else {result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));// 去重,避免重复计算相同的元素,如[0,-1,-1,-1,1,1,1],取一次[0,-1,1]即可while (left < right && nums[left] == nums[left + 1]) {left++;//left右移,直至和后一位不相等}while (left < right && nums[right] == nums[right - 1]) {right--;//left左移,直至和前一位不相等}left++; // 继续寻找下一个解right--;}}}}return result;}

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

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

相关文章

Python调用科大讯飞在线语音合成API --内附完整项目

一&#xff0c;注册讯飞账号&#xff0c;并实名制。 讯飞开放平台-以语音交互为核心的人工智能开放平台 (xfyun.cn) 二、找到音频合成&#xff0c;按页面提示申请免费试用。 在线语音合成_免费试用-讯飞开放平台 (xfyun.cn) 三、申请免费使用后&#xff0c;找到API信息如下…

vscode远程登录阿里云服务器【使用密钥方式--后期无需再进行密码登录】【外包需要密码】

1&#xff1a;windows主机上生成【私钥】【公钥】 1.1生成公钥时不设置额外密码 1.2生成公钥时设置额外密码【给外包人员使用的方法】 2&#xff1a;在linux服务器中添加【公钥】 3&#xff1a;本地vscode连接linux服务器的配置 操作流程如下 1.1本地终端中【生成免密登录…

从0到100,渠道码如何成为SaaS企业增长的加速器

在当今数字化时代&#xff0c;企业的增长策略已不再是单一和线性的。渠道码的出现&#xff0c;为SaaS&#xff08;软件即服务&#xff09;企业提供了一种全新的、多维度的增长途径&#xff0c;真正实现了从0到100的快速增长。 一、渠道码的高可定制性和灵活性&#xff0c;为Sa…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

错误提示:“由于找不到steam_api.dll,无法继续执行代码”修复方法,缺少steam_api.dll文件原因

在尝试运行某些游戏或程序时&#xff0c;用户可能会遇到一个常见的错误提示&#xff1a;“由于找不到steam_api.dll&#xff0c;无法继续执行代码”。这个错误信息表明&#xff0c;系统在启动程序或游戏时无法定位到必要的steam_api.dll文件&#xff0c;这是一个关键的动态链接…

香橙派 AIpro的NPU随手记体验日记

昇腾AI 技术路线 8TOPS INT8&#xff08;FP16&#xff09;AI算力 LPDDR4X 8GB/16GB &#x1f4c5; 20240525 开放了原理图和源码&#xff0c;功能接口就不描述了手册都有描述&#xff0c;新手好好学习可以从底层覆盖到应用一个载板拿下 完成香橙派AIpro上手体验 镜像安装&am…

C++学习---string模拟实现(2)

1.随机插入一个字符串 &#xff08;1&#xff09;insert函数插入一个字符的方法我们在之前的模拟实现里面已经搞过了&#xff0c;那个里面要注意的是这个全体向后挪动的循环过程&#xff0c;这个里面我们要实现的是插入字符串的模拟实现&#xff1b; &#xff08;2&#xff0…

网上3d全景虚拟交互展馆沉浸式体验让客户和使用者都满意

在数字化浪潮席卷而来的今天&#xff0c;3D场景网站已成为众多行业展现创意与实力的新舞台。然而&#xff0c;传统的3D建模软件往往因其复杂性和高门槛&#xff0c;让许多渴望创建逼真3D场景的用户望而却步。 幸运的是&#xff0c;华锐视点推出了搭建3D场景网站的编辑器——一款…

怎么做图片海报二维码?扫码查看图片内容

现在很多的宣传推广海报会放入二维码中&#xff0c;然后将二维码分享给用户后&#xff0c;通过扫码的方式来查看图片内容&#xff0c;从而获取自己需要的信息&#xff0c;经常在活动宣传、商品推广、旅游攻略等场景下使用。二维码可以提供更加便捷的内容获取方式&#xff0c;让…

[图解]企业应用架构模式2024新译本讲解02-表数据入口

1 00:00:00,420 --> 00:00:04,330 这个案例&#xff0c;我们就是用书上的案例了 2 00:00:06,080 --> 00:00:08,860 收入确认的一个案例 3 00:00:09,510 --> 00:00:11,100 书上讲了&#xff0c;收入确认 4 00:00:13,330 --> 00:00:15,270 就是说&#xff0c;你给…

一文搞透常见的Python编码陷阱(下)(分析+案例)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 一、当心多目标赋值中的可变变量 示例 扩展讲解 示例 增广赋值中的可变变量 示例 扩展讲解 示例 总…

Python魔法之旅-魔法方法(01)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

window安装ffmpeg播放本地摄像头视频

1、安装ffmpeg ffmpeg官方网站&#xff1a;FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…

计算机设计大赛

目录 1.1需求分析 2.1概要设计 3.1软件界面设计&#xff1a; 4.1代码开源 1.1需求分析 1.1 产品开发本说明&#xff1a; 在如今每人都会扔出许多垃圾&#xff0c;在一些地方大部分垃圾能得到卫生填埋、焚烧等无害化处理&#xff0c;而更多的垃圾则是简单的掩埋&#xff…

范罗士、希喂、安德迈爆款宠物空气净化器哪款好?深度对比测评

作为一名深受养猫过敏困扰的铲屎官&#xff0c;我经常提醒新手铲屎官重视家里的空气环境。宠物的浮毛和皮屑不仅会引发过敏&#xff0c;还可能传播细菌和病毒。很多人以为普通空气净化器能解决问题&#xff0c;但这些产品并未针对宠物家庭的特殊需求。经过多次研究和测试&#…

一些Spring的理解

说说你对Spring的理解 首先Spring是一个生态&#xff1a;可以构建企业级应用程序所需的一切基础设施 但是&#xff0c;通常Spring指的就是Spring Framework&#xff0c;它有两大核心&#xff1a; IOC和DI 它的核心就是一个对象管理工厂容器&#xff0c;Spring工厂用于生产Bea…

定积分的应用

目录 前提知识 考题类型&#xff1a;平面图形面积、旋转体体积、旋转体侧面积、平面曲线弧长 两种坐标&#xff1a;极坐标和直角坐标系 求解思路&#xff1a; 注意&#xff1a; 1:平面图形的面积&#xff1a; 常见模型&#xff1a; 面积元素的两种表达&#xff1a;积分区…

Postman入门 - 环境变量和全局变量

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、发送请求 二、设置并引用环境变量 比如&#xff1a;我建的这个生产环境 使用环境有两个方式&…

弘君资本炒股技巧:股票定向增发是什么意思?是好是坏?

股票定向增发是指已上市的公司向指定的组织或者个人投资者额外发行股份募集资金的融资方法&#xff0c;发行价格为发行前某一阶段的平均价的必定比例&#xff0c;增发的价格不得低于前二十个买卖日股票均价的80&#xff05;。 例如&#xff0c;个股定增前二十个买卖股票平均价为…

平方回文数-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第73讲。 平方回文数&#…