当前位置:网站首页>【第25天】给定一个长度为 n 的数组,统计每个数出现的次数 | 计数哈希
【第25天】给定一个长度为 n 的数组,统计每个数出现的次数 | 计数哈希
2022-06-23 22:20:00 【执 梗】
序、专栏前言
本专栏开启,目的在于帮助大家更好的掌握学习Java,特别是一些Java学习者难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
算法的学习肯定不能缺少总结,这里我推荐大家可以到高校算法社区将学过的知识进行打卡,以此来进行巩固以及复习。
学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。
序、本章前言
哈希函数我们在第20天查找元素时粗略提过,今天我们来提到它的另外一种使用场景。统计一个数组内每个数出现次数,很明显我们需要一个东西去存储信息,而哈希函数恰好就能帮助我们解决这个问题,而这一般也称之为计数法。以值为key,以出现的次数为value。像这种计数的场景,也是非常常见且重要的知识点。
一、【例题1】
1、题目描述
给定一个整数 n ( 1 ≤ n ≤ 1 e 5 ) n(1 \le n \le1e5) n(1≤n≤1e5) ,然后给定 n n n个整数 a i ( 1 ≤ 1 e 5 ) a_i(1 \le 1e5) ai(1≤1e5),统计每个数出现的次数并打印出来。
2、解题思路
像序章所言,我们以数值为key,以出现的次数为value,利用哈希函数进行存储,由于每个数的值的范围在 [ 1 , 1 e 5 ] [1,1e5] [1,1e5],我们同样也可以使用数组模拟哈希表,下标替代数值,下标存储的值替代出现次数。
3、模板代码
哈希表
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
Map<Integer,Integer> map=new HashMap<>();
for (int i = 0; i < n; i++) {
int v=sc.nextInt();
map.put(v,map.getOrDefault(v,0)+1);
}
for (int i:map.keySet()){
System.out.println(i+"出现的次数为"+map.get(i));
}
}
}
数组哈希
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] cnt=new int[100010];
for (int i = 0; i < n; i++) {
int v=sc.nextInt();
cnt[v]++;
}
for (int i = 0; i <=100000; i++) {
if (cnt[i]!=0){
System.out.println(i+"出现的次数为"+cnt[i]);
}
}
}
}
4、代码解析
- ( 1 ) (1) (1)
map.keySet函数是拿到key的映射集,帮助我们去遍历得到所有的value,这种循环样式在Java中称为增强for循环。 - ( 2 ) (2) (2)哈希函数和数组哈希有啥区别呢?其实本质原理是相同的,不过各有优缺点,我们分别讨论一下。
- ( 3 ) (3) (3)哈希函数,优势在于不需要去考虑存储的
key的值是多少,都可以直接进行存储,但由于涉及哈希碰撞以及函数调用等原因,效率肯定是不如数组哈希的。 - ( 4 ) (4) (4)数组哈希,优势在于数组的操作效率非常高,劣势在于如果存储的值范围非常大,那就需要开一个很大的数组,空间很浪费,做题容易
MLE,这时得需要进行配合哈希来进行离散化,这就有点本末倒置了。如果值域还存在负数,还需要进行偏移,因为数组下标没有负数。
三、推荐专栏
四、课后习题
| 序号 | 题目链接 | 难度评级 |
|---|---|---|
| 1 | 设计哈希集合 | 1 |
| 2 | 设计哈希映射 | 1 |
边栏推荐
- Smart doc + Torna compatible version
- docker 部署redis
- Total number of combinations ii[each element can only be solved by + once]
- Leetcode——链表笔试题
- 测试 - 用例篇 - 细节狂魔
- List<? Extensions T > and list <? Super T > difference
- UART协议时序总结
- Under the background of aging, the comprehensive energy efficiency management platform escorts hospitals
- 冶金行业数字化供应链管理系统:平台精益化企业管理,助力产业高质量发展
- Setting method of bar code local segment data variable
猜你喜欢

抖音实战~密码找回

return、const、volatile关键字

Web site SSL certificate

Test - use case - detail frenzy

Docker deploy redis

Generative countermeasure networks (Gans) and variants

Improvement of DC power distribution with open hall current sensor

Gbase observation: extended analytical database

Another short video app with high imitation and eye opening

量化投资模型——高频交易做市模型相关(Avellaneda & Stoikov’s)研究解读&代码资源
随机推荐
String s = new string ("XYZ") how many string objects are created?
Quantitative investment model -- research interpretation of high frequency trading market making model (Avellaneda & Stoikov's) & code resources
Cross domain issues of the new version of Google browser
2021-11-23: Regulations: l[1] corresponds to a, l[2] corresponds to B, l[3] corresponds to C
[things about gbase] gbase 8s high availability technology and case analysis (issue 02)
Restore IP address [standard backtracking + standard pruning]
Keywords such as extern and struct
B2B transaction management system of electronic components industry: improve the data-based driving ability and promote the growth of enterprise sales performance
[interview experience package] summary of experience of being hanged during interview (I)
日化用品行业集团采购管理系统改变传统采购模式,降低采购成本
Under the background of aging, the comprehensive energy efficiency management platform escorts hospitals
Unity text component space newline problem
Digital supply chain management system for metallurgical industry: platform lean enterprise management to help the high-quality development of the industry
量化投资模型——高频交易做市模型相关(Avellaneda & Stoikov’s)研究解读&代码资源
不容错过 | 华为内部资料--成功的项目管理PPT(123页)
2. camera calibration
Don't miss | Huawei's internal data - Successful Project Management PPT (page 123)
List<? Extensions T > and list <? Super T > difference
被同事坑到周末加班, 没见过把Redis用成这个鬼样子的。。。
Solve the problem of project dependency red reporting