【算法刷题】leetcode hot 100 哈希篇
文章目录
- 1. 两数之和
- 49. 字母异位词分组
- 128. 最长连续序列
- 总结
1. 两数之和

- leetcode:https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-100-liked
- 暴力解决:
public int[] twoSum(int[] nums, int target) {for (int i = 0; i < nums.length; i++) {for (int j = 0; j < nums.length; j++) {if (j == i) {continue;}if (nums[j] == target - nums[i]) {return new int[]{i, j};}}}return new int[]{};}
- 哈希解决:
public int[] twoSum(int[] nums, int target) {// <Value, Index>Map<Integer, Integer> map = new HashMap<>();for (int i = 0;i < nums.length; i++) {int complete = target - nums[i];if (map.containsKey(complete)) {return new int[]{map.get(complete), i};}map.put(nums[i], i);}return new int[]{};}
49. 字母异位词分组

- leetcode:https://leetcode.cn/problems/group-anagrams/description/?envType=study-plan-v2&envId=top-100-liked
- 使用排序法:
思路:
(1). 对每个字符串进行排序。
(2). 使用排序后的字符串作为哈希表的键,将相同的字母异位词放在同一组中。
public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<>();for (String str : strs) {char[] chars = str.toCharArray();Arrays.sort(chars);String key = new String(chars);if (!map.containsKey(key)){map.put(key, new ArrayList<>());}map.get(key).add(str);}return new ArrayList<>(map.values());}
- 使用字符计数法
思路:
(1). 对于每个字符串,统计其字符出现的频次,使用一个数组或哈希表表示这个频次。
(2). 将频次数组或频次哈希表作为哈希表的键,将字母异位词加入同一组。
public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<>();for (String str : strs) {int[] counts = new int[26];for (char c : str.toCharArray()) {counts[c - 'a']++;}String key = Arrays.toString(counts);if (!map.containsKey(key)) {map.put(key, new ArrayList<>());}map.get(key).add(str);}return new ArrayList<>(map.values());}
128. 最长连续序列

-
leetcode:https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-100-liked
-
解法:
通过判断一个数字是否是序列的起点来高效检查最长连续序列。
public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) {return 0;}// 将所有数字加入哈希集合HashSet<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}int max = 0;// 遍历集合for (int num : set) {// 仅从序列的起点开始扩展if (!set.contains(num - 1)) {int currentNum = num;int currentStreak = 1;// 向后扩展序列while (set.contains(currentNum + 1)) {currentNum++;currentStreak++;}// 更新最大长度max = Math.max(max, currentStreak);}}return max;}
总结
在算法题中,使用哈希表(HashMap)是一种非常高效的工具,特别适用于解决需要快速查找、配对、或分组的问题。
- 快速查找:
- 需要在数组或集合中快速查找某个元素是否存在。
- 示例:两数之和。
- 分组:
- 根据某种规则,将元素分为若干组,键是规则标识,值是元素列表。
- 示例:字母异位词分组。
- 记录频率或状态:
- 统计元素出现的频率,或跟踪元素是否被访问。
- 配对与索引存储:
- 存储某个值对应的另一部分信息,比如索引或其余条件。
解题步骤:
- 明确题意:
- 确定是否需要频繁查找或分组操作。
- 确定哈希表结构:
- Key:作为分组或查找的标识(例如目标值的差值、排序后的字符串)。
- Value:存储关联的值(例如索引、元素列表等)。
- 遍历与处理:
- 遍历数组,根据逻辑将元素存入或从哈希表中取出。
- 返回结果:
- 按题目要求返回处理后的结果。
相关文章:
【算法刷题】leetcode hot 100 哈希篇
文章目录 1. 两数之和49. 字母异位词分组128. 最长连续序列总结 1. 两数之和 leetcode:https://leetcode.cn/problems/two-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked暴力解决: public int[] twoSum(int[] nums, int target) {for …...
linux系统(ubuntu,uos等)连接鸿蒙next(mate60)设备
以前在linux上是用adb连接,现在升级 到了鸿蒙next,adb就不好用了。得用Hdc来了,在windows上安装了hisuit用的好好的,但是到了linux(ubuntu2204)下载安装了 下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生…...
支付宝实名认证
实名认证后台服务主要涉及两个接口:人脸核身初始化接口、人脸核身结果查询接口 import com.alibaba.fastjson.JSONObject; import com.alipay.api.*; import com.alipay.api.domain.DatadigitalFincloudGeneralsaasFaceVerificationInitializeModel; import com.ali…...
GO随想:GO的并发等待
协程并发等待技术——WaitGroup 类型和 errgroup 包 waitgroup 阻塞等待多个并发任务执行完成。WaitGroup 类型主要包含下面几个方法。 func (wg *WaitGroup) Add(delta int) func (wg *WaitGroup) Done() func (wg *WaitGroup) Wait() 第一个是 Add 方法,在任务运…...
kubernetes第五天
1.容器的健康检查Probe(探针)之readinessProbe就绪探针 1.exec方式检查 #通过rc资源创建了三个pod,然后使用services资源,对外提供三个pod的容器的访问入口。 apiVersion: v1 kind: ReplicationController metadata:name: web-rc-readlinepr…...
扩散模型论文概述(三):Stability AI系列工作【学习笔记】
视频链接:扩散模型论文概述(三):Stability AI系列工作_哔哩哔哩_bilibili 本期视频讲的是Stability AI在图像生成的工作。 同样,第一张图片是神作,总结的太好了! 介绍Stable Diffusion之前&…...
JVM调优,参数在哪里设置的?
JVM调优,参数在哪里设置的? 在Java应用程序中,JVM(Java Virtual Machine)的调优通常通过设置JVM启动参数来实现。这些参数可以控制JVM的内存分配、垃圾回收策略、线程管理、性能优化等方面。 1. JVM参数的位置 JVM参…...
2024年最新Stable Diffusion 新手入门教程,安装使用及模型下载
一、安装要求: ① 操作系统:Windows10以后的系统 ② CPU:不做强制性要求 ③ 内存:推荐8G以上 ④ 显卡:必须是Nvidia的独立显卡,显存最低4G,推荐20系以后;A卡、核显只能用CPU跑 …...
Ubuntu 20.04安装gcc
一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…...
IT运维的365天--024 闲置路由器关闭了dhcp,如何知道它的IP是啥
有时候各种原因,我们关闭了路由器的Dhcp,比如需要获取的无线IP和有线同一个网段的情况。时间久了,如果没做标记,大部分时候就会忘了路由器原来设置的是什么IP,没有路由器的对应IP,自然也无法进路由器后台去…...
kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration
1.引言 作为一名(坦白说有点懒的)图像处理方向的研究生,说实话最近新开一个坑,可能是因为要寒假了比较无聊,这次带来的系列是kaggle数据处理竞赛的经典例题:纽约出租车行程时间问题。希望大家多多支持&…...
Freemarker模板进行判空
文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中,你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...
C++ const关键字(八股总结)
作用 const修饰符用来定义常量,具有不可变性。 修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer&…...
Linux 清楚历史命令
在 Linux 中,执行完命令后,如果你想清除终端屏幕上的内容,可以使用以下几种方法: 1. 使用 clear 命令 clear 是 Linux 中最常用的清除屏幕命令。它会将终端屏幕清空,并将光标移动到屏幕左上角。 bash clear 2. 使用快…...
服务器双网卡NCCL通过交换机通信
1、NCCL变量设置 export CUDA_DEVICE_MAX_CONNECTIONS1 export NCCL_SOCKET_IFNAMEeno2 export NCCL_IB_DISABLE0 #export NCCL_NETIB export NCCL_IB_HCAmlx5_0,mlx5_1 export NCCL_IB_GID_INDEX3 export NCCL_DEBUGINFOGPUS_PER_NODE4MASTER_ADDR192.168.1.2 MASTER_PORT600…...
Redis哨兵(sentinel)
是什么 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 哨兵的作用 1、监控redis运行状态,包括master和slave 2、当master down机,能自动将slave切换成新master 能干嘛…...
小白学Pytorch
小白学Pytorch 发现一个比较好的教程,对于自己来说比较合适,适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚: 我们使用nn包中的Sequential搭建网络&#…...
ros2笔记-2.5.3 多线程与回调函数
本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件,learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程:{threading.get_ident()} 开始下载:{…...
第5章:Go语言错误处理和异常
第5章:Go语言错误处理和异常 5.1 错误类型基础 5.1.1 error接口 // error接口定义 type error interface {Error() string }// 自定义错误 type CustomError struct {Message stringCode int }func (e *CustomError) Error() string {return fmt.Sprintf(&quo…...
题库刷题知识点总结
算法与机器学习相关 支持向量机:是一种有监督的机器学习算法,用于分类和回归任务。它通过寻找一个最优超平面来将不同类别的数据点分开,最大化两类数据点到超平面的间隔,具有良好的泛化能力和抗噪声能力。机器学习:是…...
TimeSformer在MMAction2里跑Kinetics400,我的显卡显存不够怎么办?优化与调参实战
TimeSformer在MMAction2中训练Kinetics400的显存优化实战指南 当我在实验室的RTX 3090上首次尝试用TimeSformer训练Kinetics400时,显存不足的报错让我意识到——Transformer类模型对硬件的要求确实苛刻。经过两周的反复试验和参数调整,我总结出一套针对…...
深入剖析 memblock:Linux 内核早期内存管理的核心机制
1. memblock:Linux内核启动时的"临时工" 刚接触Linux内核开发的朋友可能会好奇:在系统启动的最初阶段,伙伴系统(Buddy System)还没准备好接管内存管理时,内核是如何分配内存的?这就不…...
芯实践 | 基于华芯微特图形上位机与LVGL的嵌入式UI开发实战
1. 华芯微特图形上位机与LVGL开发环境搭建 第一次接触华芯微特SWMDM-QFP100-34SVEA3开发板时,我被它强大的图形处理能力吸引了。这块板子搭配800x480分辨率的TFT触摸屏,配合官方提供的图形上位机工具,能快速搭建出漂亮的嵌入式界面。但光有静…...
HAL库踩坑记:STM32G030/G070 Flash擦除前,必须加上的这行‘神秘’预处理代码
STM32G0系列Flash擦除的防御性编程实践:破解CFGBSY锁死难题 开发STM32G030/G070时,你是否遇到过这样的场景:按照官方HAL库示例代码执行Flash擦除操作,却在HAL_FLASHEx_Erase()函数中陷入无限等待,最终因FLASH_SR_CFGBS…...
鸿蒙ArkTs实战:从零构建so胶水层,打通C/C++原生能力与JS/TS应用生态
1. 理解so胶水层在鸿蒙ArkTs中的核心价值 在鸿蒙应用开发中,我们经常会遇到需要调用C/C原生能力的场景。比如你可能有一个用C语言编写的高性能图像处理库,或者一个经过多年优化的数据解析模块。这时候就需要一个"翻译官"——也就是我们说的so胶…...
分布式系统中的命名与保护:构建高效安全的命名空间与加密机制
1. 分布式系统中的命名空间设计 第一次接触分布式系统时,最让我头疼的就是命名问题。想象一下,你要在几十台服务器上管理数百万个文件,每个文件可能有多个别名,还要支持跨机器访问——这就像在迷宫般的图书馆里找书,而…...
从程序员到AI大模型专家:一份详尽的转行攻略与学习资源全解析!
随着人工智能技术的飞速发展,AI大模型逐渐成为了科技领域的热点话题。对于许多开发程序员而言,转行进入AI大模型领域不仅意味着职业发展的新机遇,更是个人技术能力的一次飞跃。然而,如何顺利地完成这一转变,并非易事。…...
MOSFET vs BJT运放选型指南:从输入偏置电流看传感器电路设计
MOSFET vs BJT运放选型指南:从输入偏置电流看传感器电路设计 在医疗监护设备的血氧探头前端,工程师小李正为0.1nA级光电流的放大电路发愁。当他用传统BJT运放搭建跨阻放大器时,基线漂移竟达到满量程的15%。这个真实案例揭示了输入偏置电流对高…...
从‘玩具Demo’到‘生产级服务’:用LangServe和LCEL打包你的LangChain应用
从原型到产品:LangChain应用工程化实战指南 当你的LangChain原型在本地Jupyter Notebook里跑通第一个"Hello World"响应时,那种兴奋感就像在沙漠中发现绿洲。但很快,现实问题接踵而至——如何让这个"玩具Demo"扛住真实用…...
深度解析Recaf插件化架构:如何构建模块化的Java字节码编辑器
深度解析Recaf插件化架构:如何构建模块化的Java字节码编辑器 【免费下载链接】Recaf The modern Java bytecode editor 项目地址: https://gitcode.com/gh_mirrors/re/Recaf 在现代Java开发工具领域,模块化设计已成为提升系统可维护性和扩展性的关…...
