代码随想录算法训练营DAY6 | 哈希表(1)

DAY5休息一天,今天重启~

哈希表理论基础:代码随想录

Java hash实现 :java 哈希表-CSDN博客

一、LeetCode 242 有效的字母异位词

题目链接:242.有效的字母异位词

思路:设置字典

class Solution {
    public boolean isAnagram(String s, String t) {
        int slen = s.length(), tlen = t.length();
        if(slen != tlen){
            return false;
        }
        int[] alp = new int[26];            //设置字典存储字母信息
        for(int i = 0; i < slen; i++){
            alp[s.charAt(i) - 'a']++;
            alp[t.charAt(i) - 'a']--;
        }
        for(int i = 0; i < 26; i++){
            if(alp[i] != 0){
                return false;
            }
        }
        return true;
    }
}

 二、LeetCode 349 两个数组的交集

思路:利用哈希表的无序性、唯一性求交集。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        //哈希set无序唯一
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for(int a:nums1){
            set1.add(a);
        }
        for(int a:nums2){
            if(set1.contains(a)){
                set2.add(a);
            }
        }
        int n =  set2.size();
        int[] ans = new int[n];
        int index = 0;
        //加强循环遍历
        for(int num : set2){
            ans[index++] = num;
        }
        return ans;
    }
}

补充:HashSet遍历的三种方式

        ①迭代器遍历

        ②转换为List遍历

        ③增强for循环遍历

//迭代器遍历
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
			System.out.println(iterator.next());			
}
//转换为List遍历
List<Integer> list = new ArrayList<>(set);
for(int i : list){
    System.out.println(i);
}
//增强for循环遍历
for(int i : set){
    System.out.println(i);
}

三、LeetCode 202 快乐数

题目链接:202.快乐数icon-default.png?t=N7T8https://leetcode.cn/problems/happy-number/submissions/499209933/

思路:设置哈希表记录出现过的数,出现循环即终止。

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> set = new HashSet<>();
        while(n != 1){
            int sum = 0, temp = n;
            while(temp != 0){
                int x = temp%10;
                temp /= 10;
                sum += x*x;
            }
            if(set.contains(sum)){
                return false;
            }
            set.add(sum);
            n = sum;
        }
        return true;
    }
}

四、LeetCode 1 两数之和

题目链接:1.两数之和icon-default.png?t=N7T8https://leetcode.cn/problems/two-sum/description/

思路:以数值为Key、下标为Value,建立映射关系并使用HashMap存储;使用HashMap的containsKey()方法和get()方法获取符合条件的数值下标。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<>();    //数值为Key、下标为Value
        int[] ans = new int[2];
        for(int i = 0; i < nums.length; i++){
            if(map.containsKey(target - nums[i])){
                ans[0] = map.get(target - nums[i]);
                ans[1] = i;
                return ans;
            }
            map.put(nums[i],i);
        }
        return ans;
    }
}

 补充:HashMap常用方法

//添加键值对
put(Object key, Object value) 

//添加指定的映射关系到目标映射关系
putAll(Collection c)

//根据键来获取对应的值
get(Object key) 

//map中存在key则使用对应的value,否则使用defaultValue
getOrDefault(Object key, V defaultValue)

//是否有指定key的映射 
containsKey(Object key)

//是否有指定value的映射
containsValue(Object value)

//删除该键值对
remove(Object key) 

//返回所有值,返回形式为Collection
values() 

//测试映射是否为空
isEmpty()
 
//返回大小
size()

五、今日小结

        回顾了哈希表的原理和Java哈希表底层逻辑实现,重温了HashSet、HashMap的用法,题目难度不大,是摸鱼的一天OVO!明天也要加油~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/356888.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微搭低代码从入门到精通02数据源的介绍

目录 1 数据源的功能组成2 在低码编辑器中调用数据源的能力3 视频讲解 一款低代码产品好不好用&#xff0c;数据建模的能力是一个重要的衡量指标。因为灵活的定义表之间的关系&#xff0c;自由的选择字段的类型&#xff0c;尤其在我们依据模型自动生成页面的时候是比较重要的。…

Windows Server 2025 LTSC 预览版来了

Windows Server 2025 LTSC 预览版来了 1. 安装 Windows Server 2025 LTSC 预览版2. 安装 VMware Tools3. Windows Server 2025 LTSC 预览版4. Windows Server 2025 LTSC 预览版下载地址 1. 安装 Windows Server 2025 LTSC 预览版 使用 VMware Workstation 安装&#xff0c; 安…

JVM实战(30)——模拟堆内存溢出

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

JVM内存调优常用参数

视频讲解地址 文章目录 一、开始二、常用命令1、原生命令2、arthas命令 三、Parallel四、G1 相关参数五、通用参数六、JVM调优参数 一、开始 查看当前JDK版本所支持的垃圾回收器有哪些、以及默认使用的回收器 java -XX:PrintFlagsFinal -version | grep -E \<Use.*GC\>J…

类和对象(2)之类的6个默认成员函数(2)

上次我们梳理了初始化和清理的知识点&#xff0c;今天我们要梳理的是拷贝赋值的知识点。 拷贝构造函数 看到拷贝构造函数这个名字就能看的出来它是一个构造函数&#xff0c;所以它的语法和构造函数很相似。 既然他是一个构造函数&#xff0c;那么他就具有构造函数的语法&…

前端颜料盘??

前端颜料盘&#xff1f;&#xff1f; 一、原生颜料盘 <input type"color" placeholder"选择颜色">二、第三方开源库 Pickr&#xff1a; GitHub: https://github.com/Simonwep/pickr官方网站: https://simonwep.github.io/pickr/Pickr 是一个轻量级…

Windows Server 2003 Web服务器搭建

系列文章目录 目录 系列文章目录 前言 一、Web服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装Web服务器 4)查看安装是否成功 5)打开Internet信息服务(IIS)管理器,进行配置 6)找…

Java 字符串 07 练习-手机号屏蔽、身份证号信息查看,游戏骂人敏感词替换

注意点&#xff1a;只有返回值才是被截取的小串&#xff0c;所以需要有一个变量去承接它&#xff1b; 自己写的代码&#xff1a; import java.util.Scanner; public class practice {public static void main(String[] args) {Scanner input new Scanner(System.in);String …

离散数学4

谓词公式与量词的辖域 谓词逻辑中量词的符号化 例3&#xff0c;没有人不犯错误&#xff0c;可以理解为&#xff0c;有人不犯错误&#xff0c;用存在量词&#xff0c;因为用的是存在量词&#xff0c;就用合取 可以分步理解&#xff0c; 所有大学生都喜欢歌星&#xff1a; 所有…

HTML实战

HTML实战 标题 标题排版 img标签路径书写的两种方式&#xff1a; 绝对路径 绝对磁盘路径&#xff1a;C:\User…绝对网络路径&#xff1a;https://i2.sinaimg.cn/dy/deco/2012/0613/yocc20120613img01/news_logo.png 相对路径 ./ : 当前目录 ../ &#xff1a; 上一级目录宽…

ARL灯塔vps云服务器安装

前提是vps服务器已经安装好docker 1、下载压缩包到本地 2、解除不能扫描edu等域名的限制 解压docker_arl.zip&#xff0c;打开docker_arl/config-docker.yaml文件 删除掉edu.cn等限制域名(图中已删除) 3、上传至vps云服务器 将docker_arl文件上传到云服务器opt目录下 这里我…

仅使用 Python 创建的 Web 应用程序(前端版本)第08章_商品详细

在本章中,我们将实现一个产品详细信息页面。 完成后的图像如下。 Model、MockDB、Service都是在产品列表页实现的,所以创建步骤如下。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageI…

12种相关系数汇总,别再以为只有皮尔逊了!

所谓相关关系是指2个或2个以上变量取值之间在某种意义下所存在的规律&#xff0c;其目的在于探索数据集所存在隐藏的关系网&#xff0c;在19世纪80年代&#xff0c;Galton通过研究人类身高遗传问题首次提出了相关的概念&#xff0c;文中指出相关关系可以定义为&#xff1a;一个…

PGsql 解析json及json数组

创建测试数据 drop table if exists json_test; create table json_test as select 111 as id, {"nodes":{"1692328028076":{"nodeId":"1692328028076","nodeName":"测试表1","nodeType":"DATACO…

报错“MySql配置文件已损坏,请联系技术支持”的解决方法

目录 第一步 打开控制面板&#xff0c;选择管理工具&#xff0c;再选择事件查看器 第二步 在【应用程序】里找到这条报错&#xff0c;记下来文件内容。我自己的来源是“MsiInstaller” 第三步 winR组合键&#xff0c;输入regedit打开注册表 第四步 根据前面报错的文件名定位…

【网页设计期末】咖啡商城网页代码

本文资源&#xff1a;咖啡商城网页代码htmlCSSJavaScript_前端-CSDN问答 1.题目要求 用HTMLCSSJavaScript创建网站项目 说明:制作首页、登录页、列表页。要求: 1、首页页面结构:logo&#xff0c;导航&#xff0c;轮播&#xff0c;商品列表(九宫格结构&#xff0c; 每一格均含图…

如何过有「松弛感」的生活?

最近网上有一个词很流行&#xff0c;叫做「松弛感」。最早的出处似乎是这么一条微博&#xff1a;博主见到一家人出门旅游&#xff0c;行李全部被退回&#xff0c;空手抵达目的地&#xff0c;竟然没人紧张和生气&#xff0c;而是重新安排好行李后继续开心聊天&#xff0c;全程非…

Vue3使用setup-extend简化组件名写法

如果我们在Vue3中要使用setup的语法糖&#xff0c;就需要使用两个script标签&#xff0c;一个用于设置组件的name属性&#xff0c;一个用于编写setup中的代码。如下&#xff1a; 但是我们有觉得光是因为一个name属性就多写一个script标签有点麻烦了。 因此我们可以使用插件来进…

会话技术复习笔记

一.登录校验的需求 什么是登录校验&#xff1f; 所谓登录校验&#xff0c;指的是我们在服务器端接收到浏览器发送过来的请求之后&#xff0c;首先我们要对请求进行校验。先要校验一下用户登录了没有&#xff0c;如果用户已经登录了&#xff0c;就直接执行对应的业务操作就可以…

iOS 面试 Swift基础题

一、Swift 存储属性和计算属性比较&#xff1a; 存储型属性:用于存储一个常量或者变量 计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化. 计算属性可以用于类、结构体和枚举&#xff0c;存储属性只能用于类和结构体。存储属性可…