代码随想录训练营 Day06 - 哈希表(上)

简介: 代码随想录训练营 Day06 - 哈希表(上)

概念


哈希表(Hash Table)用的是数组支持按照下标随机访问数据的特性,所以哈希表其实就是数组的一种扩展,由数组演化而来的一种数据结构。

散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据。


作业题


242. 有效的字母异位词

package jjn.carl.hashtable;
/**
 * @author Jjn
 * @since 2023/7/3 14:18
 */
public class LeetCode242 {
    public boolean isAnagram(String s, String t) {
        if (s == null && t == null) {
            return true;
        }
        if (s == null || t == null) {
            return true;
        }
        if (s.length() != t.length()) {
            return false;
        }
        char[] firstIndex = new char[26];
        for (char c : s.toCharArray()) {
            firstIndex[c - 'a']++;
        }
        char[] secondIndex = new char[26];
        for (char c : t.toCharArray()) {
            secondIndex[c - 'a']++;
        }
        for (int i = 0; i < firstIndex.length; i++) {
            if (firstIndex[i] != secondIndex[i]) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        System.out.println("new LeetCode242().isAnagram(\"rat\", \"tar\") = " + new LeetCode242().isAnagram("rat", "tar"));
    }
}


349. 两个数组的交集

package jjn.carl.hashtable;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
 * @author Jjn
 * @since 2023/7/3 14:40
 */
public class LeetCode349 {
    public int[] intersection(int[] nums1, int[] nums2) {
        boolean[] numCount = new boolean[1001];
        for (int j : nums1) {
            numCount[j] = true;
        }
        Set<Integer> result = new HashSet<>();
        for (int j : nums2) {
            if (numCount[j]) {
                result.add(j);
            }
        }
        int[] res = new int[result.size()];
        int i = 0;
        for (Integer num : result) {
            res[i] = num;
            i++;
        }
        return res;
    }
    public static void main(String[] args) {
        int[] nums1 = new int[]{2, 3, 4, 4};
        int[] nums2 = new int[]{3, 4, 4, 5, 5};
        int[] intersection = new LeetCode349().intersection(nums1, nums2);
        System.out.println("Arrays.toString(intersection) = " + Arrays.toString(intersection));
    }
}


202. 快乐数

package jjn.carl.hashtable;
import java.util.HashSet;
import java.util.Set;
/**
 * @author Jjn
 * @since 2023/7/3 17:11
 */
public class LeetCode202 {
    public boolean isHappy(int n) {
        Set<Integer> existed = new HashSet<>();
        while (n != 1 && existed.add(n)) {
            n = getNextNumber(n);
        }
        return n == 1;
    }
    private int getNextNumber(int n) {
        int total = 0;
        while (n > 0) {
            int rest = n % 10;
            total += rest * rest;
            n = n / 10;
        }
        return total;
    }
    public static void main(String[] args) {
        System.out.println("new LeetCode202().isHappy(19) = " + new LeetCode202().isHappy(19));
        System.out.println("new LeetCode202().isHappy(2) = " + new LeetCode202().isHappy(2));
    }
}


1. 两数之和

package jjn.carl.hashtable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
 * @author Jjn
 * @since 2023/7/3 19:04
 */
public class LeetCode1 {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            Integer val = map.get(target - nums[i]);
            if (val != null) {
                return new int[]{val, i};
            }
            map.put(nums[i], i);
        }
        return new int[]{};
    }
    public static void main(String[] args) {
        int[] nums = new int[]{2, 7, 11, 15};
        int target = 9;
        int[] result = new LeetCode1().twoSum(nums, target);
        System.out.println("Arrays.toString(result) = " + Arrays.toString(result));
    }
}



目录
相关文章
|
3天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。
|
10天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
415 188
|
2天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
8天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
313 194