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

算法总结-哈希表

文章目录

    • 1.赎金信
        • 1.答案
        • 2.思路
    • 2.字母异位词分组
        • 1.答案
        • 2.思路
    • 3.两数之和
        • 1.答案
        • 2.思路
    • 4.快乐数
        • 1.答案
        • 2.思路
    • 5.最长连续序列
        • 1.答案
        • 2.思路

1.赎金信

1.答案
package com.sunxiansheng.arithmetic.day14;/*** Description: 383. 赎金信** @Author sun* @Create 2025/1/22 11:10* @Version 1.0*/
public class t383 {public static boolean canConstruct(String ransomNote, String magazine) {// 字符频率数组int[] frequency = new int[26];// 将magazine的字符频率统计一下for (char c : magazine.toCharArray()) {frequency[c - 'a']++;}// 遍历一下ransomNote,看看够不够减for (char c : ransomNote.toCharArray()) {if (--frequency[c - 'a'] < 0) {return false;}}return true;}
}
2.思路

就是利用一个字母减去’a’的范围是在0到25的,来统计一下字符的频率数组,之后再看一下够不够减即可

2.字母异位词分组

1.答案
package com.sunxiansheng.arithmetic.day14;import java.util.*;/*** Description: 49. 字母异位词分组** @Author sun* @Create 2025/1/22 13:30* @Version 1.0*/
public class t49 {public static List<List<String>> groupAnagrams(String[] strs) {// 存储结果的mapMap<String, List<String>> map = new HashMap<>();// 一次遍历,将每个元素都排序之后作为key放到map中for (String str : strs) {// 转换为数组char[] charArray = str.toCharArray();// 排序Arrays.sort(charArray);// 作为keyString key = new String(charArray);// 如果map中包含了就加入,不包含就创建一个if (!map.containsKey(key)) {List<String> list = new ArrayList<>();list.add(str);map.put(key, list);} else {map.get(key).add(str);}}return new ArrayList<>(map.values());}
}
2.思路

一次遍历,将每个元素都排序之后作为key放到map中,如果map中包含了就加入,不包含就创建一个

3.两数之和

1.答案
package com.sunxiansheng.arithmetic.day14;import java.util.HashMap;
import java.util.Map;/*** Description: 1. 两数之和** @Author sun* @Create 2025/1/22 13:41* @Version 1.0*/
public class t1 {public static int[] twoSum(int[] nums, int target) {// key为nums的元素,value为indexMap<Integer, Integer> map = new HashMap<>();// 一次遍历,如果当前元素跟map中的元素可以满足条件,就返回结果for (int i = 0; i < nums.length; i++) {if (map.containsKey(target - nums[i])) {return new int[]{map.get(target - nums[i]), i};} else {// 如果不满足条件,就将当前元素加入mapmap.put(nums[i], i);}}// do nothingreturn null;}
}
2.思路

一个map,key为nums的元素,value为index,一次遍历,如果当前元素跟map中的元素可以满足条件,就返回结果,如果不满足条件,就将当前元素加入map

4.快乐数

1.答案
package com.sunxiansheng.arithmetic.day14;import java.util.HashSet;
import java.util.Set;/*** Description: 202. 快乐数** @Author sun* @Create 2025/1/22 13:50* @Version 1.0*/
public class t202 {public static boolean isHappy(int n) {// 使用一个set来统计,如果重复出现一次,就是返回falseSet<Integer> set = new HashSet<>();// 只要 1 != nwhile (1 != n) {// 计算平方和int num = getNum(n);// 如果已经包含了,就直接返回falseif (set.contains(num)) {return false;}// 没有包含再放到set中set.add(num);// 更新这个nn = num;}return true;}/*** 拿到数字的每个位数的平方和** @param n* @return*/private static int getNum(int n) {int sum = 0;while (n > 0) {// 拿出第一位int num = n % 10;sum += (num) * num;// 将n去掉一位n = n / 10;}return sum;}
}
2.思路

先编写一个方法,拿到数字的每个位数的平方和,然后使用一个set来统计平方和,如果重复出现一次,就是返回false

5.最长连续序列

1.答案
package com.sunxiansheng.arithmetic.day14;import java.util.HashSet;
import java.util.Set;/*** Description: 128. 最长连续序列** @Author sun* @Create 2025/1/22 14:16* @Version 1.0*/
public class t128 {public static int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) {return 0;}// 将数组去重并放到set中Set<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}// 一趟遍历,只要当前元素的前一个元素不在数组中,那么就说明是一个起点,就可以寻找连续序列的长度int max = 1;for (Integer num : set) {// 统计长度int length = 1;if (!set.contains(num - 1)) {// 当前元素是起点int temp = num;// 只要包含了下一个元素,长度就加一while (set.contains(temp + 1)) {length++;temp++;}}// 更新最大值max = Math.max(max, length);}return max;}
}
2.思路

先将数组去重并放到set中,一趟遍历,只要当前元素的前一个元素不在数组中,那么就说明是一个起点,就可以寻找连续序列的长度

相关文章:

算法总结-哈希表

文章目录 1.赎金信1.答案2.思路 2.字母异位词分组1.答案2.思路 3.两数之和1.答案2.思路 4.快乐数1.答案2.思路 5.最长连续序列1.答案2.思路 1.赎金信 1.答案 package com.sunxiansheng.arithmetic.day14;/*** Description: 383. 赎金信** Author sun* Create 2025/1/22 11:10…...

向下调整算法(详解)c++

算法流程&#xff1a; 与⽗结点的权值作⽐较&#xff0c;如果⽐它⼤&#xff0c;就与⽗亲交换&#xff1b; 交换完之后&#xff0c;重复 1 操作&#xff0c;直到⽐⽗亲⼩&#xff0c;或者换到根节点的位置 大家可能会有点疑惑&#xff0c;这个是大根堆&#xff0c;22是怎么跑到…...

蓝桥杯之c++入门(一)【C++入门】

目录 前言5. 算术操作符5.1 算术操作符5.2 浮点数的除法5.3 负数取模5.4 数值溢出5.5 练习练习1&#xff1a;计算 ( a b ) ⋆ c (ab)^{\star}c (ab)⋆c练习2&#xff1a;带余除法练习3&#xff1a;整数个位练习4&#xff1a;整数十位练习5&#xff1a;时间转换练习6&#xff…...

使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南

在电商领域&#xff0c;通过图片搜索商品&#xff08;拍立淘&#xff09;已经成为一种重要的商品检索方式。1688平台的item_search_img接口允许用户通过上传图片来搜索相似商品&#xff0c;这为商品信息采集和市场分析提供了极大的便利。本文将详细介绍如何使用Python爬虫技术调…...

ElasticSearch-文档元数据乐观并发控制

文章目录 什么是文档&#xff1f;文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES&#xff0c;最近在检索资料的时候翻阅到了 ES 的官方文档&#xff0c;里面对 ES 的基础与案例进行了通俗易懂的解释&#xff0c;读下来也有不少收获&#xff0…...

使用Navicat Premium管理数据库时,如何关闭事务默认自动提交功能?

使用Navicat Premium管理数据库时&#xff0c;最糟心的事情莫过于事务默认自动提交&#xff0c;也就是你写完语句运行时&#xff0c;它自动执行commit提交至数据库&#xff0c;此时你就无法进行回滚操作。 建议您尝试取消勾选“选项”中的“自动开始事务”&#xff0c;点击“工…...

【单细胞-第三节 多样本数据分析】

文件在单细胞\5_GC_py\1_single_cell\1.GSE183904.Rmd GSE183904 数据原文 1.获取临床信息 筛选样本可以参考临床信息 rm(list ls()) library(tinyarray) a geo_download("GSE183904")$pd head(a) table(a$Characteristics_ch1) #统计各样本有多少2.批量读取 学…...

(java) IO流

学习IO流之前&#xff0c;我们需要先认识file对象&#xff0c;帮助我们更好的使用IO流 1.1 file 作用&#xff1a;关联硬盘上的文件 写法&#xff1a; File(String path); (推荐)File(String parent, String child); //由父级路径&#xff0c;再子级路径拼接而成File(File p…...

2025年1月个人工作生活总结

本文为 2025年1月工作生活总结。 研发编码 使用sqlite3命令行查询表数据 可以直接使用sqlite3查询数据表&#xff0c;不需进入命令行模式。示例如下&#xff1a; sqlite3 database_name.db "SELECT * FROM table_name;"linux shell使用read超时一例 先前有个编译…...

线性调整器——耗能型调整器

线性调整器又称线性电压调节器&#xff0c;以下是关于它的介绍&#xff1a; 基本工作原理 线性调整器的基本电路如图1.1(a)所示,晶体管Q1(工作于线性状态,或非开关状态)构成一个连接直流源V和输出端V。的可调电气电阻,直流源V由60Hz隔离变压器&#xff08;电气隔离和整流&#…...

【2025美赛D题】为更美好的城市绘制路线图建模|建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的美赛O奖、国赛国一的数学建模团队&#xff0c;我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解析&#xff0c…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.28 存储之道:跨平台数据持久化方案

好的&#xff0c;我将按照您的要求生成一篇高质量的Python NumPy文章。以下是第28篇《存储之道&#xff1a;跨平台数据持久化方案》的完整内容&#xff0c;包括目录、正文和参考文献。 1.28 存储之道&#xff1a;跨平台数据持久化方案 目录 #mermaid-svg-n1z37AP8obEgptkD {f…...

拼车(1094)

1094. 拼车 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:bool carPooling(vector<vector<int>>& trips, int capacity) {uint32_t passenger_cnt 0;//将原数据按照from排序auto func_0 [](vector<int> & …...

基于Python的人工智能患者风险评估预测模型构建与应用研究(下)

3.3 模型选择与训练 3.3.1 常见预测模型介绍 在构建患者风险评估模型时,选择合适的预测模型至关重要。不同的模型具有各自的优缺点和适用场景,需要根据医疗数据的特点、风险评估的目标以及计算资源等因素进行综合考虑。以下详细介绍几种常见的预测模型。 逻辑回归(Logisti…...

< OS 有关 > Android 手机 SSH 客户端 app: connectBot

connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上&#xff0c;连接 SSH 服务器&#xff0c;去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …...

向量和矩阵算法笔记

向量和矩阵算法笔记 Ps:因为本人实力有限,有一部分可能不太详细,若有补充评论区回复,QWQ 向量 向量的定义 首先,因为我刚刚学到高中的向量,对向量的看法呢就是一条有长度和方向的线,不过这在数学上的定义其实是不对,甚至跟我看的差别其实有点大,真正的定义就是数域…...

uniapp使用uni.navigateBack返回页面时携带参数到上个页面

我们平时开发中也经常遇到这种场景&#xff0c;跳转一个页面会进行一些操作&#xff0c;操作完成后再返回上个页面同时要携带着一些参数 其实也很简单&#xff0c;也来记录一下吧 假设从A页面 跳转到 B页面 A页面 直接上完整代码了哈&#xff0c;很简单&#xff1a; <t…...

Python 梯度下降法(二):RMSProp Optimize

文章目录 Python 梯度下降法&#xff08;二&#xff09;&#xff1a;RMSProp Optimize一、数学原理1.1 介绍1.2 公式 二、代码实现2.1 函数代码2.2 总代码 三、代码优化3.1 存在问题3.2 收敛判断3.3 函数代码3.4 总代码 四、优缺点4.1 优点4.2 缺点 Python 梯度下降法&#xff…...

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年

Android Studio 1.0 宣发于 2014 年 12 月&#xff0c;而现在时间来到 2025 &#xff0c;不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年&#xff0c;也代表着了我的职业生涯也超十年&#xff0c;现在回想起来依然觉得「唏嘘」&#xff…...

sem_wait的概念和使用案列

sem_wait 是 POSIX 标准中定义的一个用于同步的函数&#xff0c;它通常用于操作信号量&#xff08;semaphore&#xff09;。信号量是一个整数变量&#xff0c;可以用来控制对共享资源的访问。在多线程编程中&#xff0c;sem_wait 常用于实现线程间的同步。 概念 sem_wait 的基…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...