优选算法-哈希表

算法原理

1.哈希表是什么?

哈希表是存储数据的容器

2.有啥用?

"快速"查找某个元素(最多可以达到O(1))

3.什么时候用?

当我们频繁的查找某一个数时,可以用哈希表,也可以用二分

4.怎么用?

1.容器(哈希表)

2.用数组模拟简易哈希表(字符串中的"字符",数据范围很小的时候)

题目解析

1.两数之和

https://leetcode.cn/problems/two-sum/description/

题目描述

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为t的那两个数,并返回数组下标

例如: nums=[2,7,11,15] t=9 输出:[0,1]

算法原理

解法一:暴力枚举(固定一个数,往前加)

解法二:哈希表做优化

2,7,11,15\] t=9 将11扔进哈希表的时候,因为t=9,所以我们要找t=-2,在哈希表中找 #### 代码实现 ```java class Solution { public int[] twoSum(int[] nums, int target) { Map map=new HashMap<>(); int n=nums.length; for(int i=0;itrue #### 算法原理 s1每个字符出现个数与s2中每个字符出现次数,完全相同 hash1-\>存s1 hash2-\>存s2 用数组模拟 策略二:只使用一个哈希表-\>只统计s1,遍历s2再减,有负数返回false 如果字符串长度不相等直接false #### 代码实现 ```java class Solution { public boolean CheckPermutation(String s1, String s2) { if(s1.length()!=s2.length()){ return false; } int[] hash=new int[26]; for(int i=0;itrue \[1,2,3,4\]-\>false #### 算法原理 和T1找两数之和类似(这里我们就是相当于找nums\[i\]) #### 代码实现 ```java class Solution { public boolean containsDuplicate(int[] nums) { Set set=new HashSet<>(); for(int x:nums){ if(set.contains(x)){ return true; } set.add(x); } return false; } } ``` ### 4.存在重复元素二 [https://leetcode.cn/problems/contains-duplicate-ii/description/](https://leetcode.cn/problems/contains-duplicate-ii/description/ "https://leetcode.cn/problems/contains-duplicate-ii/description/") #### 题目描述 给定nums和一个k,判断数组中是否存在两个不同索引i和j,满足nums\[i\]==nums\[j\],且abs\[i-j\]\<=k,存在返回-\>true,不存在,返回-\>false eg:\[1,2,3,1\] k=3-\>返回true \[1,0,1,1\] k=1 返回true #### 算法原理 \[1,0,0,1,3,1,4\] k=2 hash\ 第一个Integer存的是nums\[i\],第二个Integer存的是i(可以覆盖,因为题上要求abs(绝对值)) #### 代码实现 ```java class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Map hash=new HashMap<>(); for(int i=0;i

输出[["bat"],["nat","tan"],["ate","tea","eat"]]

算法原理

解法:哈希表

1.判断2个字符串是否是字母异位词(排序)

2.如何分组<String,String[]>

"aet"->"eat","tea","ate"

"ant"->"tan","nat"

"abt"->"bat"

代码实现

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> hash=new HashMap<>();
        for(String s:strs){
            char[] tmp=s.toCharArray();
            Arrays.sort(tmp);
            String str=new String(tmp);
            if(!hash.containsKey(str)){
                hash.put(str,new ArrayList<>());
            }
            hash.get(str).add(s);
        }
        return new ArrayList(hash.values());
    }
}
相关推荐
孞㐑¥12 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风12 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風13 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT0613 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠13 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
想进个大厂14 小时前
代码随想录day37动态规划part05
算法
sali-tec14 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
子春一14 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
人道领域14 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
TracyCoder12314 小时前
LeetCode Hot100(34/100)——98. 验证二叉搜索树
算法·leetcode