[二刷] 代码随想录算法训练营第五天| 哈希表理论基础、242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

[KamaCoder] 哈希表理论基础

[KamaCoder] 哈希表理论基础

哈希表(散列表)是一个可以将对象转换成关键码, 通过关键码获取到对应值的数据结构. 常见的实现方式为数组.

将对象转换成关键码需要 hash 函数, hash(obj) % tableSize 后就是对应的关键码索引的一种实现.

当我们需要判断一个元素是否在集合中的时候, 就可以考虑使用哈希表. 例如 java 里的 Set、Map.

[LeetCode] 242. 有效的字母异位词

[LeetCode] 242. 有效的字母异位词 文章解释

[LeetCode] 242. 有效的字母异位词

一开始没关注到输入的两个字符串中的字符只包含小写字母, 因此用一个 Map<Character, Integer> 来存储对应的字符出现的次数, 效率稍微低了一些.

class Solution {public boolean isAnagram(String s, String t) {HashMap<Character, Integer> chCount = new HashMap<>();if (s != null) {for (int i = 0; i < s.length(); i++) {int count = chCount.getOrDefault(s.charAt(i), 0);chCount.put(s.charAt(i), count + 1);}}if (t != null) {for (int i = 0; i < t.length(); i++) {int count = chCount.getOrDefault(t.charAt(i), 0);count--;if (count < 0) {return false;}chCount.put(t.charAt(i), count);}}for (Map.Entry<Character, Integer> entry : chCount.entrySet()) {if (entry.getValue() > 0) {return false;}}return true;}
}

通过数组 int[] chCount = new int[26] 优化:

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

[LeetCode] 349. 两个数组的交集

[LeetCode] 349. 两个数组的交集 文章解释

[LeetCode] 349. 两个数组的交集

使用 Set 来去重是我没想到的, 这样做简单了很多. 当然如果限制数字在 1-1000 范围内的话, 就可以不用 Set, 用 int[] numbers = new int[1001], 查找的效率会高很多.

class Solution {public int[] intersection(int[] nums1, int[] nums2) {int[] numbers = new int[1001];// 用来去重的数据结构for (int i = 0; i < nums1.length; i++) {numbers[nums1[i]] = 1;}List<Integer> intersectionNumbers = new ArrayList<>();for (int i = 0; i < nums2.length; i++) {if (numbers[nums2[i]] == 1) {numbers[nums2[i]] = 0;intersectionNumbers.add(nums2[i]);}}int[] result = new int[intersectionNumbers.size()];for (int i = 0; i < intersectionNumbers.size(); i++) {result[i] = intersectionNumbers.get(i);}return result;}
}
class Solution {public int[] intersection(int[] nums1, int[] nums2) {if (nums1 == null || nums2 == null) {return new int[0];}Set<Integer> nums1Set = new HashSet<>();// 使用 hashset 来去重for (int i = 0; i < nums1.length; i++) {nums1Set.add(nums1[i]);}List<Integer> intersection = new ArrayList<>();for (int i = 0; i < nums2.length; i++) {if (nums1Set.remove(nums2[i])) {intersection.add(nums2[i]);}}int[] result = new int[intersection.size()];for (int i = 0; i < intersection.size(); i++) {result[i] = intersection.get(i);}return result;}
}

[LeetCode] 202. 快乐数 

[LeetCode] 202. 快乐数 文章解释

[LeetCode] 202. 快乐数

快乐数为什么不会变成无限不循环的状态, 这个属于数学范畴了, 权当这是真的吧.

class Solution {public boolean isHappy(int n) {Set<Integer> existNumber = new HashSet<>();int newNumber = n;while (true) {newNumber = getNumber(newNumber);if (newNumber == 1) {return true;} else if (!existNumber.add(newNumber)) {return false;}}}private int getNumber(int number) {int newNumber = 0;int current = 0;while (number > 0) {current = number%10;newNumber += current * current;number = number/10;}return newNumber;}
}

[LeetCode] 1. 两数之和

[LeetCode] 1. 两数之和 文章解释

[LeetCode] 1. 两数之和

虽然是 LeetCode 第一题, 不用暴力解法的话还是需要一下脑经转个弯的(可以理解为基本的算法思维).

现在让我手撕三数之和, 我也是撕不出来的... 但是面试会考啊...

同理四数之和也需要掌握... 头疼.

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> numberIndex = new HashMap<>();for (int i = 0; i < nums.length; i++) {if (numberIndex.containsKey(target - nums[i])) {return new int[]{i, numberIndex.get(target - nums[i])};}if (!numberIndex.containsKey(nums[i])) {numberIndex.put(nums[i], i);}}return new int[0];}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源软件项目:趋势、参与经验与收获

在当今这个全球经济与科技日新月异的时代&#xff0c;开源软件项目&#xff08;Open Source Software, OSS&#xff09;正以前所未有的速度蓬勃发展&#xff0c;成为推动技术创新、促进产业合作、加速知识共享的重要力量。随着云计算、大数据、人工智能等技术的兴起&#xff0c…

matlab 绘制参数方程

matlab 绘制参数方程 绘制参数方程绘制结果 绘制参数方程 clc; clear; close all;axis_length 100;% 定义参数t的范围 t 0:0.01:100;% 计算x和y的值 x t.^2 1; y 4*t - t.^2;% 绘制函数图像 plot(x, y); xlabel(x); ylabel(y); title(Plot of the curve xt^21, y4t-t^2…

机器学习之主成分分析案例-红酒主成分分析

&#x1f377; 机器学习实战&#xff1a;使用PCA与sklearn红酒数据集进行特征降维与模型预测对比 在机器学习中&#xff0c;主成分分析&#xff08;PCA&#xff09;是一种有效的降维技术&#xff0c;它通过寻找数据中的主成分来减少特征数量&#xff0c;同时尽量保留数据的结构…

人工智能全景图2.0 | 一文了解人工智能学科

大家好&#xff0c;这是一节人工智能的科普视频&#xff0c;试图用40多分钟的时间&#xff0c;带你宏观了解人工智能学科&#xff0c;对人工智能有个初步的、全景式的把握&#xff0c;这对你学习具体人工智能细节大有裨益&#xff0c;也是我珍贵的总结。 视频链接&#xff08;建…

灰色关联分析【系统分析+综合评价】

系统分析&#xff1a; 判断哪个因素影响最大 基本思想&#xff1a;根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理&#xff08;去量纲、缩小变量范围&#xff09; 熟练使用excel与其公式和固定&#xff08…

一套成熟的实验室信息管理系统源码,.Net 检验系统LIS源码,实现从采集、检测、报告、归档的全程跟踪管理

一套成熟的实验室信息管理系统源码。在长期的医疗信息化实践中&#xff0c;我们分析总结了大量客户实例&#xff0c;建立了以病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标的产品开发思路&#xff0c;将医学检验、科室管理和财务统计等检验科室/实验室…

my.ini配置文件中port有什么作用?

my.ini配置文件 [mysqld] port 13306 [client]port13306在my.ini配置文件中&#xff0c;[client] 和 [mysqld] 节中的 port 参数有着不同的作用&#xff1a; [client] port 这个参数定义的是MySQL客户端尝试连接到MySQL服务器时所使用的端口号。 当你在命令行或其他客户端工具…

c++类多态

c类多态 定义&#xff1a;同一操作或者函数&#xff0c;在不同对象上的表现 常见问题&#xff1a; 1、c构造函数可不可以是虚函数&#xff0c;析构函数可不可以是虚函数 无论何种场景&#xff0c;构造函数不可能是虚函数 析构函数可以是虚函数&#xff0c;析构函数为虚函数…

电脑基础知识 | 电脑的基本组成

电脑作为我们日常工作和娱乐的重要工具&#xff0c;扮演着举足轻重的角色。当我们谈论电脑的基本组成时&#xff0c;其实是在探讨电脑硬件和软件两个核心部分。硬件是电脑看得见、摸得着的物理设备&#xff0c;而软件则是运行在这些硬件之上的程序和指令。两者相辅相成&#xf…

【GoLang】Golang 快速入门(第一篇)

目录 1.简介&#xff1a; 2.设计初衷&#xff1a; 3.Go语言的 特点 4.应用领域: 5.用go语言的公司&#xff1a; 6. 开发工具介绍以及环境搭建 1.工具介绍: 2.VSCode的安装: 3.安装过程&#xff1a; 4.Windows下搭建Go开发环境--安装和配置SDK 1.搭建Go开发环境 - 安装…

每日一练,java03

目录 题目wait()、notify()和notifyAll()方法的特性和使用场景wait() 方法notify() 方法notifyAll() 方法使用场景 注意事项 题目 选自牛客网 1.下面关于JAVA的垃圾回收机制&#xff0c;正确的是&#xff08; &#xff09; A.当调用“System.gc()”来强制回收时&#xff0c;系…

如何优化 PostgreSQL 中的连接查询性能?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 如何优化 PostgreSQL 中的连接查询性能&#xff1f;一、理解连接查询的基本原理二、优化连接查询的关键…

Pyqt5新手教程

PyQt界面开发的两种方式&#xff1a;可视化UI 编程式UI &#xff08;1&#xff09;可视化UI&#xff1a;基于Qt Designer可视化编辑工具进行组件拖放、属性设置、布局管理等操作创建界面。 一是将其保存为.ui文件&#xff0c;然后在PyQt应用程序中加载和使用.ui文件。 二是使用…

企业级数据分析平台合集介绍

企业发展离不开数据分析&#xff0c;数据分析推动着企业运营、决策和战略规划。它正逐步深入到各行各业的核心业务流程中&#xff0c;从传统的金融、零售、制造业扩展到医疗健康、教育、能源等更多领域。企业正通过数据分析平台实现数据资源的最大化利用&#xff0c;推动业务与…

获取 Git 版本号和编译时间并将它们传递给 C++ 代码可以通过 CMake 和预处理宏来实现。

下面是详细的步骤和示例代码&#xff1a; 获取 Git 版本号&#xff1a; 使用 execute_process 命令执行 git describe 或其他适合的 Git 命令来获取版本号。 将命令输出保存到一个 CMake 变量中。 获取编译时间&#xff1a; 使用 CMake 的 string(TIMESTAMP …) 命令获取当前…

音频剪辑里的几种基础操作

音频对于视频的重要性&#xff0c;怎么强调都不为过&#xff0c;它在视频里扮演着举足轻重的角色&#xff0c;对观众有着极为深远的影响。下面为您阐述音频在视频中的关键意义&#xff1a; ① 情感传递&#xff1a;音频有强大的情感传达能力&#xff0c;借助声音的起伏变化、音…

项目标红,识别不了maven项目,解决办法

首先&#xff0c;检查 preferences 其次&#xff0c;检查IDEA 的 jdk。File-》Project Structure 最后&#xff1a; 1. 2. mvn clean install -Dmaven.test.skiptrue 跳过单元测试 maven跳过单元测试-maven.test.skip和skipTests的区别-CSDN博客

CAD框架介绍

1、适用范围&#xff1a;矢量编辑软件如 服装模板软件、CAD软件、绘图软件 2、支持PLT,DXF,PDF,GCode&#xff08;服装裁割指令)等矢量文件导入 3、支持简易的自动手动排料 4、直线&#xff0c;曲线等编辑功能 5、分页输出绘图指令 6、良好的框架结构&#xff1a;绘图引擎…

【MP4】mp4文件详解(二)—— mp文件分析工具

文章目录 一、前言二、MP4文件分析工具1、软件工具1.1、UltraEdit1.2、Hexinator1.3、mp4info1.4、mp4explorer1.5、MediaInfo 2、在线工具2.1、Online Mp4 Parser2.2、MP4Box.js / ISOBMFF Box Structure Viewer 一、前言 MP4文件分析工具可以帮助你查看和分析MP4视频文件中的…

从混乱到有序:Codigger 软件项目体检助力软件项目管理

在软件项目管理的奇妙世界里&#xff0c;程序员可弟哥就像是一位勇敢的探索者&#xff0c;他深知项目管理中那些常见的难题。 项目进度常常如同脱缰的野马&#xff0c;难以掌控&#xff0c;导致交付日期不断延迟&#xff0c;这让可弟哥十分头疼。成本也仿佛是个调皮的小精灵&am…