当前位置: 首页 > 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 的基…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...