hot100之哈希
两数之和(001)
先看代码
class Solution {
HashMap<Integer, Integer> map = new HashMap<>();
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
for (int i = 0; i < n; i++){
if (map.containsKey(nums[i])){
return new int[]{ map.get(nums[i]), i};
}
map.put(target - nums[i], i);
}
return new int[]{0,0};
}
}
- 分析
对枚举的每一个num进行target - num处理, 来服务后来的num
- 感悟
充分利用每一次枚举, 对强相关性数据进行关联
字母异位词分组(049)
先看代码
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> map = new HashMap<>();
for (String str : strs){
char[] temp = str.toCharArray();
Arrays.sort(temp);
String sortString = new String(temp);
List<String> list = map.getOrDefault(sortString, new ArrayList<>());
list.add(str);
map.put(sortString,list);
}
return new ArrayList<>(map.values());
}
}
- 分析
根据分组依据(同组数据字符串包含相同的字符)对每个str进行字符排序得到temp
以temp作为分组依据
- 感悟
在需要对所有值进行处理时 O(n)必定为最优时间复杂度, 此题不可避免的要对 无序str进行处理 排序(* k * log k) 如果对str进行枚举再组合(3a4b1c5m)的话有 (* k * 26)
log k < 26显然排序算法更优
最长连续序列(128)
先看代码
class Solution {
public int longestConsecutive(int[] nums) {
int res = 0;
HashSet<Integer> set = new HashSet<>();
for (int num : nums){
set.add(num);
}
for (int num : set){
if (set.contains(num-1)){
continue;
}
int numEnd = num +1;
while (set.contains(numEnd)){
numEnd++;
}
res = Math.max(res , numEnd - num);
}
return res;
}
}
- 分析
将nums放入HashSet中,再通过找到连续序列的起始点,计算连续序列长度取最大值
- 感悟
此题的时间复杂度为O(n + k),其中k = n - 重复数字,而二分排序的时间复杂度为O(n log n + n)
但二分排序的效率却高于哈希,可能是因为哈希需要进行哈希计算、解决哈希冲突, 及哈希扩容
这一系列琐事吧
hot100之哈希的更多相关文章
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java 哈希表运用-LeetCode 1 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...
- Oracle 哈希连接原理
<基于Oracle的sql优化>里关于哈希连接的原理介绍如下: 哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法. 在Oracle 7.3 ...
- SQL连接操作符介绍(循环嵌套, 哈希匹配和合并连接)
今天我将介绍在SQLServer 中的三种连接操作符类型,分别是:循环嵌套.哈希匹配和合并连接.主要对这三种连接的不同.复杂度用范例的形式一一介绍. 本文中使用了示例数据库AdventureWorks ...
- BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2046 Solved: 749[Submit][Statu ...
- [bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- minHash最小哈希原理
minHash最小哈希原理 收藏 初雪之音 发表于 9个月前 阅读 208 收藏 9 点赞 1 评论 0 摘要: 在数据挖掘中,一个最基本的问题就是比较两个集合的相似度.通常通过遍历这两个集合中的所有 ...
- .net的一致性哈希实现
最近在项目的微服务架构推进过程中,一个新的服务需要动态伸缩的弹性部署,所有容器化示例组成一个大的工作集群,以分布式处理的方式来完成一项工作,在集群中所有节点的任务分配过程中,由于集群工作节点需要动态增 ...
随机推荐
- JDK各个版本发布时间和版本名称
版权 版本 名称 发行日期 JDK 1.0 Oak(橡树) 1996-01-23 JDK 1.1 1997-02-19 JDK 1.1.4 Sparkler(宝石) 1997-09-12 JDK ...
- Win10锁屏与关机相关设置-注册表
禁用锁屏 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData ...
- JBoltAI 与 AIGS 的深度融合:重构企业数智化未来
在企业数智化转型浪潮中,JBoltAI 凭借其独特的 AIGS(AI Generate Service)解决方案,正成为连接大模型能力与企业实际需求的桥梁.其核心价值在于通过技术框架的重构,将 AI ...
- Centos系统云主机中nvme盘不可用解决方法
本文分享自天翼云开发者社区<Centos系统云主机中nvme盘不可用解决方法>,作者:P****n 问题描述 Linux系统的云主机使用NVMe盘后,出现非预期的慢IO读写,导致系统或者应 ...
- SpringBoot启动方法分析
SpringBoot启动run方法分析 1.场景引入 在项目启动的时候,有时候我们需要在启动的时候,执行一些逻辑. 比如说,项目启动的时候,我想把一些热门商品的数据加载到缓存中去: 比如说,自定义了一 ...
- 基于STM32F4+FREERTOS进行结构体变量的传递
原始参考链接如下↓ Freertos 接收消息队列数据不对,是姿势不正确吗 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! https://www.armbbs.cn ...
- Apache DolphinScheduler 3.3.0 Alpha发布,功能增强与性能优化大升级!
近期,Apache DolphinScheduler进行了版本更新,发布了3.3.0 alpha版本.Apache DolphinScheduler 3.3.0 alpha版本在任务管理.容错能力.扩 ...
- Go操作MySQL总结
1.下载驱动包 打开GoLand->Terminal,输入:go get github.com/go-sql-driver/mysql 2.编写代码 package mainimport ( & ...
- C#高性能开发之类型系统:从C# 7.0 到C# 14的类型系统演进全景
自C# 7.0以来,C#语言在类型系统方面引入了众多新数据类型.类型构造和语言特性,以提升性能.类型安全性和开发效率.本文全面整理了从C# 7.0到C# 14.0(截至2025年4月,C# 14.0为 ...
- 安卓逆向学习及APK抓包(一)【Kali】安装 Scrcpy 进行手机投屏
00X00 前言 官方给出的安装方式apt install scrcpy,但是经过各种换源操作啥的依然报错 ┌──(root㉿kali)-[~/桌面] └─# apt install scrcpy 正 ...