代码随想录算法训练营(JAVA) | 第三章 哈希表part01 DAY05

2024-02-27 06:36

本文主要是介绍代码随想录算法训练营(JAVA) | 第三章 哈希表part01 DAY05,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   今日任务 

力扣242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。

 什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

使用数组和set来做哈希法的局限。

  • 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
  • set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。

242. 有效的字母异位词

思路

由于字符串只包含 26个小写字母,因此我们可以维护一个长度为 26 的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次

题解
class Solution {public boolean isAnagram(String s, String t) {if (s.length() != t.length()) {return false;}int[] hashTable = new int[26];for (int i = 0; i < s.length(); i ++ ) {hashTable[s.charAt(i) - 'a']++;}for (int i = 0; i < t.length(); i ++ ) {hashTable[t.charAt(i) - 'a']--;if (hashTable[t.charAt(i) - 'a'] < 0) {return false;}}return true;}
}

349. 两个数组的交集

思路

苦于 基础不牢语法不熟现去看了看基础依照思路写出来了

老是忘条件处理

题解
1.使用HashSet
class Solution {public int[] intersection(int[] nums1, int[] nums2) {if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {return new int[0];}Set<Integer> set1 = new HashSet<>();Set<Integer> setList = new HashSet<>();for (int i : nums1) {set1.add(i);}for (int i : nums2) {if(set1.contains(i)) {setList.add(i);}}// 方法一: 将结果集合转化为数组// return setList.stream().mapToInt(x -> x).toArray();// 方法二: 创建一个新的数组存放setList中的值并返回int[] arr = new int[setList.size()];int flag = 0;for (int i : setList) {arr[flag++] = i;}return arr;}
}
2.使用哈希数组
class Solution {public int[] intersection(int[] nums1, int[] nums2) {int[] hash1 = new int[1010];int[] hash2 = new int[1010];List<Integer> resList = new ArrayList<>();for (int i : nums1) {hash1[i] ++;}for (int i : nums2) {hash2[i]++;}for (int i = 0; i < 1010; i ++) {if (hash1[i] > 0 && hash2[i] > 0) {resList.add(i);}}int index = 0;int[] res = new int[resList.size()];for (int i : resList) {res[index++] = i;}return res;}
}

202. 快乐数

思路

第一遍读题 emmmm没想法,看一眼提示   /思考  要存 set 也就是说这道题有重复的内容咯,每位数的平方和会重复!那也就是说会陷入循环,也就是说只要有重复内容就不是快乐数

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

1. 两数之和

思路

正如提示说的要用map KV,为什么用map呢?因为 要存 数值  和 下标 这两个值

题解 
class Solution {public int[] twoSum(int[] nums, int target) {int[] res = new int[2];Map<Integer, Integer> map = new HashMap<>();if (nums == null || nums.length == 0) {return res;}for (int i = 0; i < nums.length; i++ ) {int tmp = target - nums[i];if (map.containsKey(tmp)) {res[0] = map.get(tmp);res[1] = i;break;}map.put(nums[i], i);}return res;}
}

这篇关于代码随想录算法训练营(JAVA) | 第三章 哈希表part01 DAY05的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751499

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件