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

系列文章目录

代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素
代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表
代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结
代码随想录算法训练营第五天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

文章目录

  • 系列文章目录
  • 454.四数相加II
  • 383. 赎金信
  • 15. 三数之和
  • 18. 四数之和
  • 总结


454.四数相加II

题目链接: 454.四数相加II
题目内容: 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n;nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
视频讲解:学透哈希表,map使用有技巧!LeetCode:454.四数相加II

核心思路:
先遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到字典中,然后遍历大C和大D数组,统计0-(c+d) 在dict中出现的情况。

class Solution:def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:record=dict()for i in range(len(nums1)):for j in range(len(nums2)):record[nums1[i]+nums2[j]]=record.get(nums1[i]+nums2[j],0)+1count=0for i in range(len(nums3)):for j in range(len(nums4)):target=nums3[i]+nums4[j]if 0-target in record:count+=record[0-target]return count

383. 赎金信

题目链接: 383.赎金信
题目内容: 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次

使用数组:

class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:ransomNote_count=[0]*26magazine_count=[0]*26for i in ransomNote:ransomNote_count[ord(i)-ord('a')]+=1for i in magazine:magazine_count[ord(i)-ord('a')]+=1return all(ransomNote_count[i]<=magazine_count[i] for i in range(26))

使用字典:

class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:record={}for i in magazine:record[i]=record.get(i,0)+1for i in ransomNote:if i not in record or record[i] == 0:return Falserecord[i]-=1return True

15. 三数之和

题目链接: 15.三数之和
题目内容: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
视频讲解:梦破碎的地方!| LeetCode:15.三数之和

哈希法:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []nums.sort()# 找出a + b + c = 0# a = nums[i], b = nums[j], c = -(a + b)for i in range(len(nums)):# 排序之后如果第一个元素已经大于零,那么不可能凑成三元组if nums[i] > 0:breakif i > 0 and nums[i] == nums[i - 1]: #三元组元素a去重continued = {}for j in range(i + 1, len(nums)):if j > i + 2 and nums[j] == nums[j-1] == nums[j-2]: # 三元组元素b去重continuec = 0 - (nums[i] + nums[j])if c in d:result.append([nums[i], nums[j], c])d.pop(c) # 三元组元素c去重else:d[nums[j]] = jreturn result

双指针法:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort()result=[]for i in range(len(nums)):if nums[i] > 0: return resultif i > 0 and nums[i] == nums[i-1]:continueleft=i+1right=len(nums)-1while left<right:if nums[left]+nums[right]+nums[i]>0:right-=1elif nums[left]+nums[right]+nums[i]<0:left+=1else:result.append([nums[i],nums[left],nums[right]])while right>left and nums[right]==nums[right-1]:right-=1while right>left and nums[left]==nums[left+1]:left+=1left+=1right-=1return result

18. 四数之和

题目链接: 18.四数之和
题目内容: 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < n;a、b、c 和 d 互不相同;nums[a] + nums[b] + nums[c] + nums[d] == target;你可以按 任意顺序 返回答案 。
视频讲解:难在去重和剪枝!| LeetCode:18. 四数之和

class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:nums.sort()n = len(nums)result = []for i in range(n):if nums[i] > target and nums[i] > 0 and target > 0:# 剪枝(可省)breakif i > 0 and nums[i] == nums[i-1]:# 去重continuefor j in range(i+1, n):if nums[i] + nums[j] > target and target > 0: #剪枝(可省)breakif j > i+1 and nums[j] == nums[j-1]: # 去重continueleft, right = j+1, n-1while left < right:s = nums[i] + nums[j] + nums[left] + nums[right]if s == target:result.append([nums[i], nums[j], nums[left], nums[right]])while left < right and nums[left] == nums[left+1]:left += 1while left < right and nums[right] == nums[right-1]:right -= 1left += 1right -= 1elif s < target:left += 1else:right -= 1return result

总结

  1. 一般来说哈希表都是用来快速判断一个元素是否出现集合里;
  2. 使用哈希法解决问题时,一般会选择如下三种数据结构:数组、set (集合)、map(映射):
    • 数组:哈希值比较小,范围也比较小
    • set:数值比较大
    • map:key,value

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

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

相关文章

K8S之configMapsecret

job 第一个是初始化尝试&#xff0c;初始化尝试失败之后&#xff0c;会再重试两次。 配置资源管理: Secret Configmap*:1.2加入的新特征 1.18 Secret: 保存密码&#xff0c;token,敏感的k8s资源 这类数据可以存放在镜像当中&#xff0c;但是防止secret当中可以更方便的控…

QT第五天

使用QT绘图和绘图事件&#xff0c;完成仪表盘绘图&#xff0c;如下图&#xff1a; 程序运行结果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen> #include <QBrush&…

PromptCast-时间序列预测的好文推荐

前言 这是关于大语言模型和时间序列预测结合的好文推荐&#xff0c;发现这篇文章&#xff0c;不仅idea不错和代码开源维护的不错&#xff0c;论文也比较详细&#xff08;可能是顶刊而不是顶会&#xff0c;篇幅大&#xff0c;容易写清楚&#xff09;&#xff0c;并且关于它的Br…

2023 IoTDB Summit:天谋科技高级开发工程师谭新宇《优其效:如何用 IoTDB 监控工具进行深度系统调优》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

2024年1月16日Arxiv热门NLP大模型论文:Multi-Candidate Speculative Decoding

大幅提速NLP任务&#xff0c;无需牺牲准确性&#xff01;南京大学提出新算法&#xff0c;大幅提升AI文本生成效率飞跃 引言&#xff1a;探索大型语言模型的高效文本生成 在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;大型语言模型&#xff08;LLMs&#xf…

Kafka-生产者

Kafka在实际应用中&#xff0c;经常被用作高性能、可扩展的消息中间件。 Kafka自定义了一套网络协议&#xff0c;只要遵守这套协议的格式&#xff0c;就可以向Kafka发送消息&#xff0c;也可以从Kafka中拉取消息。 在实践生产过程中&#xff0c;一套API封装良好、灵活易用的客…

跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode 先把glfw3.h里的KeyCode的定义抄到咱这里来。 在YOTO下创建KeyCode.h: #pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的 #define YT_KEY_SPACE 32 #define YT_KEY_APOSTROPHE 39 /* */ #define YT_KEY_COMMA 44…

迈向2024:医疗机器人的市场前景与技术革新

原创 | 文 BFT机器人 医疗机器人技术正以前所未有的速度在主流医学领域取得卓越进展&#xff0c;新应用、新技术不断涌现&#xff0c;使得该领域在过去一年中取得了令人惊叹的增长。然而&#xff0c;这仅仅是冰山一角&#xff0c;未来的发展空间仍然广阔无垠。 展望2024年&…

海外云手机:跨境养号的新趋势

近年来&#xff0c;市场综合数据显示&#xff0c;利用海外云手机进行跨境养号已经成为跨境电商发展的新潮流。特别是在社交电商营销和短视频引流领域&#xff0c;海外云手机不仅能够提高流量的质量&#xff0c;还能让商家实现业务翻倍增长。接下来&#xff0c;本文将简要阐述海…

软件测试|使用Python生成PDF文件

简介 PDF&#xff08;Portable Document Format&#xff09;是一种常用的文档格式&#xff0c;具有跨平台兼容性、保真性、安全性和交互性等特点。我们日常生活工作中的合同、报告、论文等通常都采用PDF格式&#xff0c;以确保文档在不同的操作系统&#xff08;例如 Windows、…

CPU是怎么执行指令的?

CPU是怎么执行指令的&#xff1f; 计算机每执行一条指令都可分为三个阶段进行。即取指令——分析指令——执行指令。 取指令的任务是&#xff1a;根据程序计数器pc&#xff08;Program Counter&#xff09;中的值从程序存储器读出现行指令&#xff0c;送到指令寄存器。 分析…

Leetcode刷题【每日n题】(2)

&#x1f95a;今日鸡汤&#x1f95a; 修仙之道&#xff0c;需有勇气和决心&#xff0c;方能战胜一切困难。 ——《斗破苍穹》 目录 1.题目一 2.思路分析 3.代码实现 4.题目二 5.思路分析 6.代码实现 1.题目一 16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 …

LabVIEW高效振动时效处理系统

概述&#xff1a;介绍了一个利用LabVIEW开发的振动时效处理系统&#xff0c;有效降低加工工件的内部残余应力&#xff0c;提升其质量和寿命。 项目背景 工业加工中的工件常存在残余应力问题&#xff0c;这直接影响工件的质量和寿命。虽然热时效和自然时效法被广泛应用于降低残余…

基于ssm的疫苗预约系统论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疫苗预约系统软件来发挥其高效地信息处理的作用&#xff0c…

基于Python的货币识别技术实现

目录 介绍本文的目的和意义货币识别技术的应用场景货币识别的基本原理图像处理技术在货币识别中的应用特征提取方法:SIFT、HOG等支持向量机(SVM)分类器的使用实现过程数据集的收集和预处理特征提取和训练分类器参考文献介绍 本文的目的和意义 本文的目的是介绍如何利用Pyt…

LLMs之GLM-4:GLM-4的简介、安装和使用方法、案例应用之详细攻略

LLMs之GLM-4&#xff1a;GLM-4的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年01月16日&#xff0c;智谱AI在「智谱AI技术开放日(Zhipu DevDay)」推出新一代基座大模型GLM-4。GLM-4 的主要亮点和能力如下:>> 性能与GPT-4相近&#xff1a;多模态、长文…

YOLOv5改进系列(26)——添加RFAConv注意力卷积(感受野注意力卷积运算)

【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分析 YOLOv5改进系列&#xff08;1&#xff09;——添加SE注意力机制 YOLOv5改进系列&#xff08;2&#xff09;——添加CBAM注意力机制 YOLOv5改进系列&…

VM安装群晖系统 挂载整个硬盘给群晖系统

前言 在我们日常业务需求中&#xff0c;经常需要把整个磁盘的空间分配给群晖使用&#xff0c;那么如何通过vm分配整个磁盘空间给群晖系统。 操作 需要用管理员运行VM虚拟机 然后添加硬盘 就可以有权限全部添加了。这样会清除要挂载的磁盘的全部的数据。

Erlang/OTP中的日志与事件处理(一)

Erlang/OTP中的日志 Simple Cache真要是在运行过程中出了什么故障该怎么办呢?就当前的设计来看,除非服务整个崩溃&#xff0c;否则你可能根本无法察觉有任何异常。(比如&#xff0c;在我们的设计中&#xff0c;元素存储进程在退出时会自行进行清理&#xff0c;而由于工作进程…

十五、CSS3DObject和CSS2DObject的区别

在3d场景中我们会遇到很多标签,主要分为三种,css3dobject、css2dobject、css3dsprite三种,今天主要说说css3dobject和css2dobject的相似点和区别。 Threejs版本:0.138.3 下面看实现的效果: 相似点 使用方法都是差不多的,下面讲解下css2dobject的使用方法在index.html增…