代码随想录算法训练营第六天 | 哈希表 四道简单题

简介: 代码随想录算法训练营第六天 | 哈希表 四道简单题

前言

哈希表(英文名 Hash table, 国内也被称为散列表)

哈希表是根据关键码的值而直接进行访问的数据结构, 数组就是一张哈希表

哈希表一般用来快速判断一个元素是否出现在集合里

例如要查询一个名字是否在这所学校里。

要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。

我们只需要初始化把这所学校里学生的名字都存在哈希表里,在查询的时候通过索引直接就可以知道这位同学在不在这所学校里了。

将学生姓名映射到哈希表上就涉及到了hash function ,也就是哈希函数

上述例子来源于代码随想录

今日任务:

咱就是说, 万万没想到我现在做曾经做过的简单题竟然这么的游刃有余,哈哈哈哈哈

242. 有效的字母异位词

题目描述

网络异常,图片无法展示
|

解题思路

整体解题思路就是记录字符串 s中每一个字母计算出现的次数, 再去遍历字符串 t中的每一个字母去做比较是否一致

字符串转 char数组 循环遍历 char数组使得对应下标 ++ 在 --, 如果当前下标出现 -的就代表元素个数不一致

最后一步的判断可以留到最后遍历我们的统计数组来做, 也会更快一点, 不用每一次对数组进行操作的时候都去判断

代码展示

public static boolean isAnagram(String s, String t) {
    if (s.length() != t.length()){
        return false;
    }
    int[] intsS = new int[26];
    char[] charsS = s.toCharArray();
    for (int i = 0; i < charsS.length; i++) {
        intsS[charsS[i] - 'a'] =  intsS[charsS[i] - 'a'] + 1;
    }
    char[] charsT = t.toCharArray();
    for (int i = 0; i < charsT.length; i++) {
        intsS[charsT[i] - 'a'] =  intsS[charsT[i] - 'a'] - 1;
        if (intsS[charsT[i] - 'a'] < 0){
            return false;
        }
    }
    return true;
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

多学多练算法不一定会让你的编码水平变得多么高深,甚至在你工作中可能完全用不到,但是如果碰到了就是赚了

只能说游刃有余,虽然最后一步是在每次修改统计数组的时候去做的判断,增加了时间消耗,但是实际上在编码过程中考虑到了这个问题,只是懒得改了,大家不要有这个坏习惯

349. 两个数组的交集

题目描述

网络异常,图片无法展示
|

解题思路

和上一道题一样的,先去记录每一个元素是否出现过,如果出现过就加入到返回里面

需要注意的是要用 Set集合,因为元素是可能重复的

代码展示

public static int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> result = new HashSet<>();
    Map<Integer,Integer> map = new HashMap<>();
    for (int i = 0; i < nums1.length; i++) {
        map.put(nums1[i], map.getOrDefault(nums1[i], 0) + 1);
    }
    for (int i = 0; i < nums2.length; i++) {
        if (map.get(nums2[i]) != null) {
            result.add(nums2[i]);
        }
    }
    return result.stream().mapToInt(Integer::intValue).toArray();
}
复制代码

提交结果

网络异常,图片无法展示
|

202. 快乐数

题目描述

网络异常,图片无法展示
|

解题思路

这道题就是一直去按照题目中的要求计算, 然后用 Set去存储每一次计算出来的返回值,如果返回值已存在则证明陷入了死循环

代码展示

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> set = new HashSet<>();
        while(n != 1){
            set.add(n);
            n = test(n);
            if (set.contains(n)) {
                return false;
            }
        }
        return true;
    }
    public int test(int n){
        int result = 0;
        while(n >= 10){
            int m = n % 10;
            n /= 10;
            result += m * m;
        }
        return result += n * n;
    }
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

这道题第一次提交的时候,在 test方法里面循环判断  >= 10 写成了 >10 边界没判断清楚, 失误失误

1. 两数之和

题目描述

网络异常,图片无法展示
|

解题思路

创建 map存储元素值和下标

遍历数组,判断 map中是否存在 (target - 当前元素),若存在,则直接返回两个下标, 若遍历结束都不存在则直接返回 null

代码展示

public static  int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        if (map.containsKey(target - nums[i])) {
            return new int[]{i,map.get(target - nums[i])};
        }else{
            map.put(nums[i], i);
        }
    }
    return null;
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

万万没想到以前这道题还给我带来了这么大的困扰,竟然错过这么多次, 手动捂脸,哈哈哈,重新做起来真的是游刃有余




宁轩
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
70 1
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
Paper2Code是由韩国科学技术院与DeepAuto.ai联合开发的多智能体框架,通过规划、分析和代码生成三阶段流程,将机器学习论文自动转化为可执行代码仓库,显著提升科研复现效率。
347 19
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
内网监控桌面与 PHP 哈希算法:从数据追踪到行为审计的技术解析
本文探讨了内网监控桌面系统的技术需求与数据结构选型,重点分析了哈希算法在企业内网安全管理中的应用。通过PHP语言实现的SHA-256算法,可有效支持软件准入控制、数据传输审计及操作日志存证等功能。文章还介绍了性能优化策略(如分块哈希计算和并行处理)与安全增强措施(如盐值强化和动态更新),并展望了哈希算法在图像处理、网络流量分析等领域的扩展应用。最终强调了构建完整内网安全闭环的重要性,为企业数字资产保护提供技术支撑。
79 2
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
174 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
员工行为监控软件中的 Go 语言哈希表算法:理论、实现与分析
当代企业管理体系中,员工行为监控软件已逐步成为维护企业信息安全、提升工作效能的关键工具。这类软件能够实时记录员工操作行为,为企业管理者提供数据驱动的决策依据。其核心支撑技术在于数据结构与算法的精妙运用。本文聚焦于 Go 语言中的哈希表算法,深入探究其在员工行为监控软件中的应用逻辑与实现机制。
103 14
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
93 7
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
80 4
单位电脑监控软件中 PHP 哈希表算法的深度剖析与理论探究
数字化办公的时代背景下,单位电脑监控软件已成为企业维护信息安全、提升工作效率的关键工具。此类软件可全面监测员工的电脑操作行为,收集海量数据,故而高效管理和处理这些数据显得尤为重要。数据结构与算法在此过程中发挥着核心作用。本文将聚焦于哈希表这一在单位电脑监控软件中广泛应用的数据结构,并通过 PHP 语言实现相关功能,为优化单位电脑监控软件提供技术支持。
58 3
论内网电脑监控软件中 PHP 哈希表算法的深度剖析与探究
当代企业网络管理体系中,内网电脑监控软件占据着关键地位。其功能涵盖对员工电脑操作行为的实时监测,以此维护企业信息安全,同时助力企业优化网络资源配置,提升整体工作效能。在构建内网电脑监控软件的诸多技术中,数据结构与算法构成了核心支撑体系。本文聚焦于哈希表这一重要数据结构,深入剖析其在 PHP 语言环境下,如何为内网电脑监控软件的高效运作提供助力,并通过详实的代码示例予以阐释。
57 3

热门文章

最新文章

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问