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

哈希表 算法专题

哈希表简介

  1. 是什么
    存储数据的容器
  2. 有啥用?
    "快速"查找某个元素
  3. 什么时候用哈希表
    频繁地查找某个数(有序用二分)
  4. 怎么用哈希表
  • 容器
  • 用数组模拟
    字符串中的字符
    范围比较小的数

一. 两数之和

两数之和

class Solution {public int[] twoSum(int[] nums, int target) {//固定一个数, 找其他的数和其相加是否等于target//那么就可以转换成://固定一个数i, 找到其他的数是否有target-i//那么,频繁地找一个数, 想到可以使用hash表//固定一个数, 判断这个数之前是否有target-i, 即在哈希表中找Map<Integer, Integer> hash = new HashMap<>();//<数, 下标>for(int i= 0; i < nums.length; i++){int x = target - nums[i];if(hash.containsKey(x)){return new int[]{i, hash.get(x)};}hash.put(nums[i], i);}return null;}
}

二. 判断是否互为字符重排

判断是否互为字符重排

class Solution {public boolean CheckPermutation(String s1, String s2) {//判断每个字符出现的个数是否相同即可//1. 先判断字符串长度是否相等if(s1.length() != s2.length()){return false;}int[] hash = new int[26];//将s1的情况放在哈希表中for(int i = 0; i < s1.length(); i++){hash[s1.charAt(i) - 'a']++;}//判断s2的情况for(int i = 0; i < s2.length(); i++){hash[s2.charAt(i) - 'a']--;if(hash[s2.charAt(i) - 'a'] < 0){return false;}}return true;}
}

三. 存在重复元素

存在重复元素

//思路和两数之和类似
class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> hash = new HashSet<>();for(int x : nums){if(hash.contains(x)) return true;hash.add(x);}return false;}
}

四. 存在重复元素II

存在重复元素II

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Map<Integer, Integer> hash = new HashMap<>();for (int i = 0; i < nums.length; i++) {if (hash.containsKey(nums[i]) && i - hash.get(nums[i]) <= k) {return true;}hash.put(nums[i], i);}return false;}
}

五. 字母异位词分组

字母异位词分组

class Solution {public List<List<String>> groupAnagrams(String[] strs) {//排序后相同的单词属于同一组//<排序后, 排序前[]>//结果返回所有的value即可Map<String, List<String>> hash = new HashMap<>();for(String x : strs){char[] tmp = x.toCharArray();Arrays.sort(tmp);String key = new String(tmp);if(!hash.containsKey(key)){hash.put(key, new ArrayList());}hash.get(key).add(x);}return new ArrayList(hash.values());}
}
```\
http://www.lryc.cn/news/472450.html

相关文章:

  • unity3d————[HideInInspector]
  • Soanrquber集成Gitlab 之 导入Gitlab项目
  • 论区块链技术及应用
  • GPT避坑指南:如何辨别逆向、AZ、OpenAI官转
  • Qt 文本文件读写与保存
  • Linux基础环境搭建(CentOS7)- 安装Scala和Spark
  • SpringBoot 下的Excel文件损坏与内容乱码问题
  • 官宣下代GPU存在缺陷,50系显卡或将迎来涨价
  • 使用pytorch实现LSTM预测交通流
  • C/C++(八)C++11
  • 使用three.js 实现 自定义绘制平面的效果
  • 玩转Docker | 使用Docker部署捕鱼网页小游戏
  • 第2章 Android App开发基础
  • 通过 SYSENTER/SYSEXIT指令来学习系统调用
  • Nginx开发实战——网络通信(一)
  • w外链如何跳转微信小程序
  • 获取平台Redis各项性能指标
  • STM32 HAL 点灯
  • 【http作业】
  • WPF+MVVM案例实战(十一)- 环形进度条实现
  • 简述MCU微控制器
  • 微服务的雪崩问题
  • Java基础(4)——构建字符串(干货)
  • logback日志脱敏后异步写入文件
  • 电容的基本知识
  • 【Axure高保真原型】分级树筛选中继器表格
  • STM32 I2C通信:硬件I2C与软件模拟I2C的区别
  • 服务器新建用户
  • 鸿蒙开发融云demo发送图片消息
  • 音视频入门基础:AAC专题(11)——AudioSpecificConfig简介