当前位置: 首页 > news >正文

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

打卡Day7

  • 1.454.四数相加II
  • 2.383. 赎金信
  • 3.15. 三数之和
  • 4.18. 四数之和

1.454.四数相加II

题目链接:四数相加II
文档讲解: 代码随想录

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res = 0;Map<Integer,Integer> map = new HashMap<>();for(int i: nums1){for(int j: nums2){int sum = i + j;map.put(sum, map.getOrDefault(sum, 0) + 1);}}for(int i: nums3){for(int j: nums4){res += map.getOrDefault((0 - i - j), 0);}}return res;}
}

2.383. 赎金信

题目链接:赎金信
文档讲解: 代码随想录

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] record = new int[26];if(ransomNote.length() > magazine.length()){return false;}for(int i = 0; i < magazine.length(); i++){record[magazine.charAt(i) - 'a']++;}for(int i = 0; i < ransomNote.length(); i++){record[ransomNote.charAt(i) - 'a']--;}for(int i = 0; i < ransomNote.length(); i++){//判断不等于0是不对的,没有考虑到magazine中存在该字母出现更多次的情况if(record[ransomNote.charAt(i) - 'a'] < 0){return false;}}return true;}
}
//使用增强for
class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] record = new int[26];if(ransomNote.length() > magazine.length()){return false;}for(char i: magazine.toCharArray()){record[i - 'a'] += 1;}for(char i: ransomNote.toCharArray()){record[i - 'a'] -= 1;}for(int i: record){if(i < 0){return false;}}return true;}
}

3.15. 三数之和

题目链接:三数之和
文档讲解: 代码随想录

class Solution {public List<List<Integer>> threeSum(int[] nums) {//哈希法List<List<Integer>> res = new ArrayList<>();//需要对nums进行排序Arrays.sort(nums);for(int i = 0; i < nums.length; i++){//如果第一个元素大于0,则不可能存在三元组if(nums[i] > 0){return res;}//a去重if(i > 0 && nums[i] == nums[i - 1]){continue;}HashSet<Integer> set = new HashSet<>();for(int j = i + 1; j < nums.length; j++){//b去重if(j > i + 2 && nums[j] == nums[j - 1] && nums[j] == nums[j - 2]){continue;}int c = - nums[i] - nums[j];if(set.contains(c)){res.add(Arrays.asList(nums[i], nums[j], c));set.remove(c);//c去重}else{set.add(nums[j]);}                        }}return res;}
}

注意点:
(1)a 的去重:在两种方法中纠结,一是判断nums[i] == nums[i+1],一种是判断nums[i] == nums[i-1]。如果前者,那么存在遗漏情况,例如{-1,-1,2}。
(2)b 的去重:可以和 a 一样判断nums[j] == nums[j-1],从而跳过相同的b。但是这样子可能会遗漏情况,例如{0,0,0}。因此只有当当前的 b 和前两个 b 都相同时才跳过当前的 b。这样可以保证至少有一个 b 被使用,并且不会出现重复。

class Solution {public List<List<Integer>> threeSum(int[] nums) {//双指针法List<List<Integer>> res = new ArrayList<>();//需要对nums进行排序Arrays.sort(nums);for(int i = 0; i < nums.length; i++){if(nums[i] > 0){return res;} //a去重if(i >= 1 && nums[i] == nums[i - 1]){continue;}int left = i + 1;int right = nums.length - 1;while(left < right){//left和right是两个指针,与二分查找不一样int sum = nums[i] + nums[left] + nums[right];if(sum > 0){right--;}else if(sum < 0){left++;}else{res.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--;}right--;left++;}}}      return res;}
}

两数之和不能用双指针法的原因:因为双指针法需要排序,而两数之和需要返回索引下标。

4.18. 四数之和

题目链接:四数之和
文档讲解: 代码随想录

class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(nums);for(int i = 0; i < nums.length; i++){//剪枝if(nums[i] > 0 && nums[i] > target){return res;}//去重if(i > 0 && nums[i] == nums[i - 1]){continue;}for(int j = i + 1; j < nums.length; j++){                            //去重if(j > i + 1 && nums[j] == nums[j - 1]){continue;}int left = j + 1;int right = nums.length - 1;while(left < right){long sum = (long) nums[i] + nums[j] + nums[left] + nums[right];//防止溢出if(sum > target){right--;}else if(sum < target){left++;}else{res.add(Arrays.asList(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;}
}

相关文章:

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

打卡Day7 1.454.四数相加II2.383. 赎金信3.15. 三数之和4.18. 四数之和 1.454.四数相加II 题目链接&#xff1a;四数相加II 文档讲解&#xff1a; 代码随想录 class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res 0;Map…...

Python和tkinter实现的字母记忆配对游戏

Python和tkinter实现的字母记忆配对游戏 因为这个小游戏用到了tkinter&#xff0c;先简要介绍一下它。tkinter是Python的标准GUI(图形用户界面)库&#xff0c;它提供了一种简单而强大的方式来创建图形界面应用程序。它提供了创建基本图形界面所需的所有工具&#xff0c;同时保…...

Leetcode Hot100之链表

1.相交链表 解题思路 快慢指针&#xff1a;分别求出两个链表的长度n1和n2&#xff0c;在长度较长的那个链表上&#xff0c;快指针先走n2 - n1&#xff0c;慢指针再出发&#xff0c;最后能相遇则链表相交 时间复杂度O(mn)&#xff0c;空间复杂度O(1)代码# Definition for singl…...

5.9k!一款清新好用的后台管理系统!【送源码】

今天给大家分享的开源项目是一个优雅清新后台管理系统——Soybean Admin。 简介 官方是这样介绍这个项目的&#xff1a; Soybean Admin 使用的是Vue3作为前端框架&#xff0c;TypeScript作为开发语言&#xff0c;同时还整合了NaiveUI组件库&#xff0c;使得系统具有高可用性和…...

Vue-cli搭建项目----基础版

什么是Vue-cli 全称:Vue command line interface 是一个用于快速搭建Vue.js项目的标准工具,他简化了Vue.js应用的创建和管理过程,通过命令工具帮助开发者快速生成,配置和管理Vue项目. 主要功能 同一的目录结构本地调试热部署单元测试集成打包上线 具体操作 第一步创建项目:…...

python之__call__函数介绍

Python 中的 __call__ 方法是一种特殊的方法,它允许对象像函数一样被调用。当你创建一个对象并使用括号 () 调用它时,Python 会自动调用这个对象的 __call__ 方法。 1. 基本用法 下面是一个简单的例子: class MyClass:def __init__(self, value):self.value valued…...

【AI】生成式AI服务器最低配置

【背景】 考虑数据安全&#xff0c;又想用AI赋能企业内部的日常工作&#xff0c;答案只有一个&#xff0c;本地部署。 UI采用open-web-ui&#xff0c;模型用Ollama管理&#xff0c;在局域网做成SAAS服务。要组一个服务器&#xff0c;提供部门内部最多30个的API并发。以下为反复…...

2.Android逆向协议-了解常用的逆向工具

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;微尘网校 上一个内容&#xff1a;1.Android逆向协议-环境搭建 常用的工具&#xff1a;AndroidKiller、jadx、JEB、IDA AndroidKiller…...

大数据------额外软件、插件及技术------Linux(完整知识点汇总)

Linxu 不同领域的主流操作系统 桌面操作系统 WindowsMAac OSLinux 服务器端操作系统 UNIX&#xff08;付费&#xff09;LinuxWindows Server&#xff08;付费&#xff09; 移动设备操作系统 Android&#xff08;基于Linux开源&#xff09;IOS&#xff08;不开源&#xff09; 嵌…...

iOS 其他应用的文件如何在分享中使用自己的应用打开

废话少说 一、第一步&#xff1a;先配置好plist文件 右击info.plist如下图文件打开 根据自己需要配置支持的文件类型&#xff0c;也可使用property List中配置&#xff0c;一样的 其他的文件可是参考文档&#xff1a;System-Declared Uniform Type Identifiers 可复制的代码&am…...

【编译原理必考大题】 推导构建语法树,写出语法树的短语,简单短语和句柄

写在最前 本文为编译原理重点考察大题之一&#xff0c;理论基础见专栏文章&#xff0c;0基础直接使用也可食用 文章目录 推导构造语法树1.语法树的概念2. 子树&#xff0c;短语&#xff0c;简单短语&#xff0c;句柄2.1 子树2.2 短语2.3 简单短语与句柄2.4 真题实战 推导构造语…...

redis服务介绍

redis 基础概念安装使用基础操作命令数据类型操作命令 管理和维护命令 基础概念 Remote Dictionary Server&#xff08;Redis&#xff09;远程字典服务器是完全开源免费的&#xff0c;用C语言编写的&#xff0c;遵守BSD开源协议&#xff0c;是一个高性能的&#xff08;key/val…...

nodepad 中换行符、tab替换

1 nodepad 主要符号 换行符: \r\n&#xff08;windows&#xff09; tab: \t 2 展示符号 3 相互替换 tip:需要点击扩展 参考&#xff1a; https://blog.csdn.net/lijing742180/article/details/85174564...

常见的字符串函数(包含头文件string.h)和字符函数(2)

八. strstr函数 1.strstr的定义 char *strstr( const char *str1, const char *str2 ); ->1. strstr查找子串(str2)在字符串(str2)中第一次出现的位置&#xff0c;记录并返回该位置的指针&#xff0c;如果找不到&#xff0c;则返回NULL ->2. str1&#xff1a;查找字符…...

Python | Leetcode Python题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; L 10 bin {A: 0, C: 1, G: 2, T: 3}class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:n len(s)if n < L:return []ans []x 0for ch in s[:L - 1]:x (x << 2) | bin[ch]cnt defaultdict(int)for…...

SpringCloud分布式微服务链路追踪方案:Skywalking

一、引言 随着微服务架构的广泛应用&#xff0c;系统的复杂性也随之增加。在这种复杂的系统中&#xff0c;应用通常由多个相互独立的服务组成&#xff0c;每个服务可能分布在不同的主机上。微服务架构虽然提高了系统的灵活性和可扩展性&#xff0c;但也带来了新的挑战&#xf…...

首次线下联合亮相!灵途科技携手AEye、ATI亮相2024 EAC 易贸汽车产业大会

6月22日&#xff0c;2024 EAC 易贸汽车产业大会在苏州国际博览中心圆满落幕&#xff0c;泛自动驾驶领域光电感知专家灵途科技携手自适应高性能激光雷达解决方案全球领导者AEye公司&#xff08;NASDAQ:LIDR&#xff09;及光电器件规模化量产巨头Accelight Technologies&#xff…...

一文入门CMake

我们前几篇文章已经入门了gcc和Makefile&#xff0c;现在可以来玩玩CMake了。 CMake和Makefile是差不多的&#xff0c;基本上是可以相互替换使用的。CMAke可以生成Makefile&#xff0c;所以本质上我们还是用的Makefile&#xff0c;只不过用了CMake就不用再写Makefile了&#x…...

【LeetCode面试经典150题】117. 填充每个节点的下一个右侧节点指针 II

一、题目 117. 填充每个节点的下一个右侧节点指针 II - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个…...

RTDETR更换优化器——Lion

RTDETR更换Lion优化器 论文&#xff1a;https://arxiv.org/abs/2302.06675 代码&#xff1a;https://github.com/google/automl/blob/master/lion/lion_pytorch.py 简介&#xff1a; Lion优化器是一种基于梯度的优化算法&#xff0c;旨在提高梯度下降法在深度学习中的优化效果…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...