【算法入门】哈希表

简介: 哈希表

17c98850bc1c134a9ea9f2d37b04e63.png

前言

哈希表这个名词,对于科班生来说应该都很熟悉,但对于一些没有系统学过计算机数据结构的同学,可能就有点陌生了,但是不要怕,实际上大部分同学在开发过程中都会有相关的应用,例如通过策略模式的优化if / else,或者在对循环计算的优化,都会借用到哈希表的思想,今天就和大家一起聊一聊 Hash

哈希表

简介

哈希表也叫散列表,哈希表是一种数据结构,它提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为O(1) ,因为哈希表的查找速度非常快,所以在很多时候我们可以用它来优化程序

关于哈希表,我们可以拿它和我们比较熟悉的数组做对比,数组中有两个概念,索引 index (也就是下标)和对应的值,哈希表也类似,有对应的关键字(与数组元素的下标相对应,只是没有必须要是数字了) ,并且每个关键字都有其与之相对应的值,可以说大部分情况下,哈希表与数组,是可以相互转化的,数组能做的,哈希表同样也能做

优势

数组只能通过下标迅速访问,但是这个下标与数组里存的元素值没什么关系;哈希表通过散射函数建立了数组元素关键码的值与下标的关系 , 是数组的加强版

如果不需要有序遍历数据,并且可以提前预测数据量的大小,那么哈希表在速度和易用性方面是无与伦比的

缺点

哈希表是基于数组的,数组创建后难于扩展,某些哈希表被基本填满时,性能下降得非常严重

做题

217. 存在重复元素 - 力扣(LeetCode)

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

分析

从题目中分析,只需要找到任意一个重复的数字,那么可以利用哈希表,用数字的值作为 key 去存储,如果遇到已经存在的 key,则直接返回

算法步骤

  1. 声明哈希表用来保存遍历的值
  2. 开始遍历数组
  3. 获取当前值,判断值是否已经存在,若存在,则返回结果并结束循环
  4. 储存当前值进哈希表
  5. 循环直到遍历完成
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    const map = new Map()
    for (let i = 0; i < nums.length ; i ++) {
        if (map.get(nums[i])) {
            return true
        }
        map.set(nums[i], true)
    }
    return false
};
复制代码

复杂度分析

  • 时间复杂度 O(N):遍历一遍数组既可完成(本质上是通过空间换时间)
  • 空间复杂度 O(N):需要声明哈希表进行存储
相关文章
|
16小时前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
83 0
|
16小时前
|
搜索推荐 算法 C语言
C语言选择排序算法,从入门到精通只需1秒!
C语言选择排序算法,从入门到精通只需1秒!
|
16小时前
|
算法 前端开发
|
16小时前
|
存储 算法 Java
【算法系列篇】哈希表
【算法系列篇】哈希表
|
16小时前
|
存储 算法 安全
数据结构与算法 哈希表
数据结构与算法 哈希表
7 0
|
16小时前
|
存储 机器学习/深度学习 算法
|
16小时前
|
存储 算法 Java
算法系列--哈希表
算法系列--哈希表
15 0
|
16小时前
|
机器学习/深度学习 人工智能 算法
分类算法入门:以鸢尾花数据集为例(上)
分类算法入门:以鸢尾花数据集为例(上)
36 2
|
16小时前
|
机器学习/深度学习 算法 数据可视化
分类算法入门:以鸢尾花数据集为例(下)
分类算法入门:以鸢尾花数据集为例(下)
54 2
|
16小时前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
35 0

热门文章

最新文章