代码随想录算法训练营(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

相关文章

Java利用Spire.XLS for Java自动化设置Excel的文档属性

《Java利用Spire.XLSforJava自动化设置Excel的文档属性》一个专业的Excel文件,其文档属性往往能大大提升文件的可管理性和可检索性,下面我们就来看看Java如何使用Spire... 目录Spire.XLS for Java 库介绍与安装Java 设置内置的 Excel 文档属性Java

Java中的CompletableFuture核心用法和常见场景

《Java中的CompletableFuture核心用法和常见场景》CompletableFuture是Java8引入的强大的异步编程工具,支持链式异步编程、组合、异常处理和回调,介绍其核心用法,通过... 目录1、引言2. 基本概念3. 创建 CompletableFuture3.1. 手动创建3.2.

java中4种API参数传递方式统一说明

《java中4种API参数传递方式统一说明》在Java中,我们可以使用不同的方式来传递参数给方法或函数,:本文主要介绍java中4种API参数传递方式的相关资料,文中通过代码介绍的非常详细,需要的... 目录1. 概述2. 参数传递方式分类2.1 Query Parameters(查询参数)2.2 Path

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

Java线程池核心参数原理及使用指南

《Java线程池核心参数原理及使用指南》本文详细介绍了Java线程池的基本概念、核心类、核心参数、工作原理、常见类型以及最佳实践,通过理解每个参数的含义和工作原理,可以更好地配置线程池,提高系统性能,... 目录一、线程池概述1.1 什么是线程池1.2 线程池的优势二、线程池核心类三、ThreadPoolE

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性