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

【算法刷题】leetcode hot 100 哈希篇

文章目录

  • 1. 两数之和
  • 49. 字母异位词分组
  • 128. 最长连续序列
  • 总结


1. 两数之和

在这里插入图片描述

  1. leetcode:https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-100-liked
  2. 暴力解决:
    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[]{};}
  1. 哈希解决:
   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. 字母异位词分组

在这里插入图片描述

  1. leetcode:https://leetcode.cn/problems/group-anagrams/description/?envType=study-plan-v2&envId=top-100-liked
  2. 使用排序法:

思路:
(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. 使用字符计数法

思路:
(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. 最长连续序列

在这里插入图片描述

  1. leetcode:https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-100-liked

  2. 解法:
    通过判断一个数字是否是序列的起点来高效检查最长连续序列。

    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)是一种非常高效的工具,特别适用于解决需要快速查找、配对、或分组的问题。

  1. 快速查找:
  • 需要在数组或集合中快速查找某个元素是否存在。
  • 示例:两数之和
  1. 分组:
  • 根据某种规则,将元素分为若干组,键是规则标识,值是元素列表。
  • 示例:字母异位词分组
  1. 记录频率或状态:
  • 统计元素出现的频率,或跟踪元素是否被访问。
  1. 配对与索引存储:
  • 存储某个值对应的另一部分信息,比如索引或其余条件。

解题步骤:

  • 明确题意:
    • 确定是否需要频繁查找或分组操作。
  • 确定哈希表结构:
    • Key:作为分组或查找的标识(例如目标值的差值、排序后的字符串)。
    • Value:存储关联的值(例如索引、元素列表等)。
  • 遍历与处理:
    • 遍历数组,根据逻辑将元素存入或从哈希表中取出。
  • 返回结果:
    • 按题目要求返回处理后的结果。

相关文章:

【算法刷题】leetcode hot 100 哈希篇

文章目录 1. 两数之和49. 字母异位词分组128. 最长连续序列总结 1. 两数之和 leetcode&#xff1a;https://leetcode.cn/problems/two-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked暴力解决&#xff1a; public int[] twoSum(int[] nums, int target) {for …...

linux系统(ubuntu,uos等)连接鸿蒙next(mate60)设备

以前在linux上是用adb连接&#xff0c;现在升级 到了鸿蒙next&#xff0c;adb就不好用了。得用Hdc来了&#xff0c;在windows上安装了hisuit用的好好的&#xff0c;但是到了linux(ubuntu2204)下载安装了 下载中心 | 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生…...

支付宝实名认证

实名认证后台服务主要涉及两个接口&#xff1a;人脸核身初始化接口、人脸核身结果查询接口 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 方法&#xff0c;在任务运…...

kubernetes第五天

1.容器的健康检查Probe&#xff08;探针&#xff09;之readinessProbe就绪探针 1.exec方式检查 #通过rc资源创建了三个pod,然后使用services资源&#xff0c;对外提供三个pod的容器的访问入口。 apiVersion: v1 kind: ReplicationController metadata:name: web-rc-readlinepr…...

扩散模型论文概述(三):Stability AI系列工作【学习笔记】

视频链接&#xff1a;扩散模型论文概述&#xff08;三&#xff09;&#xff1a;Stability AI系列工作_哔哩哔哩_bilibili 本期视频讲的是Stability AI在图像生成的工作。 同样&#xff0c;第一张图片是神作&#xff0c;总结的太好了&#xff01; 介绍Stable Diffusion之前&…...

JVM调优,参数在哪里设置的?

JVM调优&#xff0c;参数在哪里设置的&#xff1f; 在Java应用程序中&#xff0c;JVM&#xff08;Java Virtual Machine&#xff09;的调优通常通过设置JVM启动参数来实现。这些参数可以控制JVM的内存分配、垃圾回收策略、线程管理、性能优化等方面。 1. JVM参数的位置 JVM参…...

2024年最新Stable Diffusion 新手入门教程,安装使用及模型下载

一、安装要求&#xff1a; ① 操作系统&#xff1a;Windows10以后的系统 ② CPU&#xff1a;不做强制性要求 ③ 内存&#xff1a;推荐8G以上 ④ 显卡&#xff1a;必须是Nvidia的独立显卡&#xff0c;显存最低4G&#xff0c;推荐20系以后&#xff1b;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是啥

有时候各种原因&#xff0c;我们关闭了路由器的Dhcp&#xff0c;比如需要获取的无线IP和有线同一个网段的情况。时间久了&#xff0c;如果没做标记&#xff0c;大部分时候就会忘了路由器原来设置的是什么IP&#xff0c;没有路由器的对应IP&#xff0c;自然也无法进路由器后台去…...

kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration

1.引言 作为一名&#xff08;坦白说有点懒的&#xff09;图像处理方向的研究生&#xff0c;说实话最近新开一个坑&#xff0c;可能是因为要寒假了比较无聊&#xff0c;这次带来的系列是kaggle数据处理竞赛的经典例题&#xff1a;纽约出租车行程时间问题。希望大家多多支持&…...

Freemarker模板进行判空

文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中&#xff0c;你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...

C++ const关键字(八股总结)

作用 const修饰符用来定义常量&#xff0c;具有不可变性。 修饰变量&#xff0c;说明该变量不可以被改变&#xff1b;修饰指针&#xff0c;分为指向常量的指针&#xff08;pointer to const&#xff09;和自身是常量的指针&#xff08;常量指针&#xff0c;const pointer&…...

Linux 清楚历史命令

在 Linux 中&#xff0c;执行完命令后&#xff0c;如果你想清除终端屏幕上的内容&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用 clear 命令 clear 是 Linux 中最常用的清除屏幕命令。它会将终端屏幕清空&#xff0c;并将光标移动到屏幕左上角。 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主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新主库&#xff0c;继续对外服务 哨兵的作用 1、监控redis运行状态&#xff0c;包括master和slave 2、当master down机&#xff0c;能自动将slave切换成新master 能干嘛…...

小白学Pytorch

小白学Pytorch 发现一个比较好的教程&#xff0c;对于自己来说比较合适&#xff0c;适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚&#xff1a; 我们使用nn包中的Sequential搭建网络&#…...

ros2笔记-2.5.3 多线程与回调函数

本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件&#xff0c;learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程&#xff1a;{threading.get_ident()} 开始下载&#xff1a;{…...

第5章:Go语言错误处理和异常

第5章&#xff1a;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…...

题库刷题知识点总结

算法与机器学习相关 支持向量机&#xff1a;是一种有监督的机器学习算法&#xff0c;用于分类和回归任务。它通过寻找一个最优超平面来将不同类别的数据点分开&#xff0c;最大化两类数据点到超平面的间隔&#xff0c;具有良好的泛化能力和抗噪声能力。机器学习&#xff1a;是…...

TimeSformer在MMAction2里跑Kinetics400,我的显卡显存不够怎么办?优化与调参实战

TimeSformer在MMAction2中训练Kinetics400的显存优化实战指南 当我在实验室的RTX 3090上首次尝试用TimeSformer训练Kinetics400时&#xff0c;显存不足的报错让我意识到——Transformer类模型对硬件的要求确实苛刻。经过两周的反复试验和参数调整&#xff0c;我总结出一套针对…...

深入剖析 memblock:Linux 内核早期内存管理的核心机制

1. memblock&#xff1a;Linux内核启动时的"临时工" 刚接触Linux内核开发的朋友可能会好奇&#xff1a;在系统启动的最初阶段&#xff0c;伙伴系统&#xff08;Buddy System&#xff09;还没准备好接管内存管理时&#xff0c;内核是如何分配内存的&#xff1f;这就不…...

芯实践 | 基于华芯微特图形上位机与LVGL的嵌入式UI开发实战

1. 华芯微特图形上位机与LVGL开发环境搭建 第一次接触华芯微特SWMDM-QFP100-34SVEA3开发板时&#xff0c;我被它强大的图形处理能力吸引了。这块板子搭配800x480分辨率的TFT触摸屏&#xff0c;配合官方提供的图形上位机工具&#xff0c;能快速搭建出漂亮的嵌入式界面。但光有静…...

HAL库踩坑记:STM32G030/G070 Flash擦除前,必须加上的这行‘神秘’预处理代码

STM32G0系列Flash擦除的防御性编程实践&#xff1a;破解CFGBSY锁死难题 开发STM32G030/G070时&#xff0c;你是否遇到过这样的场景&#xff1a;按照官方HAL库示例代码执行Flash擦除操作&#xff0c;却在HAL_FLASHEx_Erase()函数中陷入无限等待&#xff0c;最终因FLASH_SR_CFGBS…...

鸿蒙ArkTs实战:从零构建so胶水层,打通C/C++原生能力与JS/TS应用生态

1. 理解so胶水层在鸿蒙ArkTs中的核心价值 在鸿蒙应用开发中&#xff0c;我们经常会遇到需要调用C/C原生能力的场景。比如你可能有一个用C语言编写的高性能图像处理库&#xff0c;或者一个经过多年优化的数据解析模块。这时候就需要一个"翻译官"——也就是我们说的so胶…...

分布式系统中的命名与保护:构建高效安全的命名空间与加密机制

1. 分布式系统中的命名空间设计 第一次接触分布式系统时&#xff0c;最让我头疼的就是命名问题。想象一下&#xff0c;你要在几十台服务器上管理数百万个文件&#xff0c;每个文件可能有多个别名&#xff0c;还要支持跨机器访问——这就像在迷宫般的图书馆里找书&#xff0c;而…...

从程序员到AI大模型专家:一份详尽的转行攻略与学习资源全解析!

随着人工智能技术的飞速发展&#xff0c;AI大模型逐渐成为了科技领域的热点话题。对于许多开发程序员而言&#xff0c;转行进入AI大模型领域不仅意味着职业发展的新机遇&#xff0c;更是个人技术能力的一次飞跃。然而&#xff0c;如何顺利地完成这一转变&#xff0c;并非易事。…...

MOSFET vs BJT运放选型指南:从输入偏置电流看传感器电路设计

MOSFET vs BJT运放选型指南&#xff1a;从输入偏置电流看传感器电路设计 在医疗监护设备的血氧探头前端&#xff0c;工程师小李正为0.1nA级光电流的放大电路发愁。当他用传统BJT运放搭建跨阻放大器时&#xff0c;基线漂移竟达到满量程的15%。这个真实案例揭示了输入偏置电流对高…...

从‘玩具Demo’到‘生产级服务’:用LangServe和LCEL打包你的LangChain应用

从原型到产品&#xff1a;LangChain应用工程化实战指南 当你的LangChain原型在本地Jupyter Notebook里跑通第一个"Hello World"响应时&#xff0c;那种兴奋感就像在沙漠中发现绿洲。但很快&#xff0c;现实问题接踵而至——如何让这个"玩具Demo"扛住真实用…...

深度解析Recaf插件化架构:如何构建模块化的Java字节码编辑器

深度解析Recaf插件化架构&#xff1a;如何构建模块化的Java字节码编辑器 【免费下载链接】Recaf The modern Java bytecode editor 项目地址: https://gitcode.com/gh_mirrors/re/Recaf 在现代Java开发工具领域&#xff0c;模块化设计已成为提升系统可维护性和扩展性的关…...