当前位置: 首页 > news >正文

代码随想录二刷day05 | 哈希表之242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

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

二刷day05

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

242.有效的字母异位词

题目链接
解题思路:

class Solution {
public:bool isAnagram(string s, string t) {int record[26] = {0};for (int i = 0; i < s.size(); i++) {// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了record[s[i] - 'a']++;}for (int i = 0; i < t.size(); i++) {record[t[i] - 'a']--;}for (int i = 0; i < 26; i++) {if (record[i] != 0) {// record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。return false;}}// record数组所有元素都为零0,说明字符串s和t是字母异位词return true;}
};

349. 两个数组的交集

题目链接
解题思路: 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result_set; // 存放结果,之所以用set是为了给结果集去重unordered_set<int> nums_set(nums1.begin(), nums1.end());for (int num : nums2) {// 发现nums2的元素 在nums_set里又出现过if (nums_set.find(num) != nums_set.end()) {result_set.insert(num);}}return vector<int>(result_set.begin(), result_set.end());}
};

202. 快乐数

题目链接
解题思路: 可能会有重复的sum出现,可以使用unordered_set 去重

class Solution {
public:// 取数值各个位上的单数之和int getSum(int n) {int sum = 0;while (n) {sum += (n % 10) * (n % 10);n /= 10;}return sum;}bool isHappy(int n) {unordered_set<int> set;while(1) {int sum = getSum(n);if (sum == 1) {return true;}// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return falseif (set.find(sum) != set.end()) {return false;} else {set.insert(sum);}n = sum;}}
};

其中

if (set.find(sum) != set.end()) {return false;} else {set.insert(sum);}n = sum;

这段代码的作用是检查 getSum(n) 计算出的 sum 是否之前已经出现过。

set 是一个 unordered_set 数据结构,用于存储之前已经计算过的 getSum(n) 的结果,也就是之前出现过的 sum

set.find(sum) 函数在 set 中查找是否已经存在 sum。如果 sum 已经存在于 set 中,说明 sum 已经被计算过,且会导致 isHappy 函数陷入循环,因此函数将返回 false

如果 sum 没有在 set 中找到,说明这是一个新的 sum 值,需要将其插入到 set 中,使用 set.insert(sum) 实现。然后,将 n 的值更新为 sum,以便在下一次循环中调用 getSum(n) 来计算下一个 sum 值。

这段代码对 isHappy 函数非常重要,因为它避免了在出现循环求和的情况下导致函数进入无限循环。


1. 两数之和

题目链接
解题思路: 需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。并且这道题目并不需要key有序,选择 std::unordered_map 效率更高,其复杂度为O(1).
map中的存储结构为 {key:数据元素,value:数组元素对应的下标}

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map <int,int> map;for(int i = 0; i < nums.size(); i++) {// 遍历当前元素,并在map中寻找是否有匹配的keyauto iter = map.find(target - nums[i]); if(iter != map.end()) {return {iter->second, i};}// 如果没找到匹配对,就把访问过的元素和下标加入到map中map.insert(pair<int, int>(nums[i], i)); }return {};}
};

其中return {iter->second, i};第一个元素是 iter->second,即匹配的键对应的值,第二个元素是 i,即当前元素的下标。

map.insert(pair<int, int>(nums[i], i));
这段代码使用了一个方便的语法糖,即 std::make_pair(nums[i], i),它可以自动推导出 std::pair 类型的模板参数,从而避免了显式指定类型的麻烦。因此,这段代码也可以写成 map.insert(std::make_pair(nums[i], i))

相关文章:

代码随想录二刷day05 | 哈希表之242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

当遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法了 二刷day05 242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和 242.有效的字母异位词 题目链接 解题思路&#xff1a; class Solution { public:bool isAnagram(string s, string…...

2023年4月广东省计算机软考中/高级备考班招生简章

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…...

在Github中77k星的王炸AutoGPT,会独立思考,直接释放双手

文章目录 1 前言1.1 什么是AutoGPT1.2 为什么是AutoGPT 2 AutoGPT部分实例2.1 类似一个Workflow2.2 市场调研2.3 自己写播客2.4 接入客服 3 安装和使用AutoGPT3.1 安装3.2 基础用法3.3 配置OpenAI的API3.4 配置谷歌API3.5 配置Pinecone API 4.讨论 1 前言 迄今为止&#xff0c…...

FVM链的Themis Pro,5日ido超百万美元

交易一直是 DeFi 乃至web3领域最经久不衰的话题&#xff0c;也因此催生了众多优秀的去中心化协议&#xff0c;如 Uniswap 和 Curve。这些协议逐渐成为了整个系统的基石。 在永续合约方面&#xff0c;DYDX 的出现将 WEB2 时代的订单簿带回了web3。其链下交易的设计&#xff0c;仿…...

OpenCV实战——尺度不变特征检测器

OpenCV实战——尺度不变特征检测器 0. 前言1. SURF 特征检测器2. SIFT 特征检测算法3. 完整代码相关链接0. 前言 特征检测的不变性是一个重要概念,虽然方向不变性(即使图像旋转也能检测到相同特征点)能够被简单特征点检测器(例如 FAST 特征检测器等)处理,但难以实现在图像尺…...

如何快速建立一个podman环境

本文介绍如何安装podman&#xff0c;并创建podman容器 环境 Centos8 安装podman Podman 是一个容器环境&#xff0c;首先在主机上安装 Podman。执行下面命令来安装podman&#xff1a; [rootlocalhost ~]# yum -y install podman然后修改一下用户命名空间的大小&#xff1a…...

计算机视觉:人工智能领域当下火热的计算机视觉技术综述

计算机视觉技术发展火热,是当前人工智能技术核心领域之一,计算机视觉是人工智能领域的一颗明珠,它是目前人工智能领域最早得到应用的技术之一,拥有广大的发展空间,目前很多技术产品已经得到应用,并改变着这个世界。 当下火热的技术 1. 目标检测:通过计算机视觉技术,检…...

EMC 专用名词大全~骚扰波形

2&#xff0e;1 瞬态&#xff08;的&#xff09; transient &#xff08;adjective and noun&#xff09; 在两相邻稳定状态之间变化的物理量或物理现象&#xff0c;其变化时间小于所关注的时间尺度。 2&#xff0e;2 脉冲 Pulse 在短时间内突变&#xff0c;随后又迅速返回其初…...

14:24面试,14:32就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子&#xff0c;自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有…...

高频算法题

排序 冒泡排序快速排序选择排序归并排序堆排序 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 数组中重复的数字 数组 删除有序数组中的重复项 26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 最小的K个数 最小K个数 - 最小K个数 - 力扣&a…...

AI工程师眼中的未来 | 年轻人如何求职选方向

一个人的命运不仅要看个人的奋斗 也要看历史的选择 如果能顺应未来的趋势选择对了方向 就能让财富巨增瞬间起飞 但是如果选择错了方向 随着社会的发展 有很多工作的机会会渐渐的消失 而我们自己也会更容易被社会所淘汰 所以未来的趋势是什么 我们应该如何选择不同的方向 这对现…...

能自动翻译的软件-最精准的翻译软件

批量翻译软件是一种利用自然语言处理技术和机器学习算法&#xff0c;可以快速翻译大量文本内容的工具。批量翻译软件可以处理多种格式的文本&#xff0c;包括文档、网页、邮件、PDF等等&#xff0c;更符合掌握多语言的计算机化需求。 147CGPT翻译软件特点&#xff1a; 1.批量任…...

7.1 大学排行榜分析(project)

大学排名没有绝对的公正与权威&#xff0c;文件&#xff08;alumni.txt, soft.txt&#xff09;中为按照不同评价体系给出的国内大学前100名排行&#xff0c;对比两个排行榜单前m的学校的上榜情况&#xff0c;分析不同排行榜排名的差异。 输入输出 第一行输入1,第二行输入m&…...

TensorFlow 2.0 的新增功能:第三、四部分

原文&#xff1a;What’s New in TensorFlow 2.0 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何实现目…...

第1章 如何听起来像数据科学家

第1章 如何听起来像数据科学家 文章目录 第1章 如何听起来像数据科学家1.1.1 基本的专业术语1.1.3 案例&#xff1a;西格玛公司1.2.3 为什么是Python1.4.2 案例&#xff1a;市场营销费用1.4.3 案例&#xff1a;数据科学家的岗位描述 我们拥有如此多的数据&#xff0c;而且正在生…...

哈希表题目:在系统中查找重复文件

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法思路和算法代码复杂度分析 进阶问题答案后记 题目 标题和出处 标题&#xff1a;在系统中查找重复文件 出处&#xff1a;609. 在系统中查找重复文件 难度 6 级 题目描述 要求 给定一个目录信息列表 paths…...

机器人感知与控制关键技术及其智能制造应用

源自&#xff1a;自动化学报 作者&#xff1a;王耀南 江一鸣 姜娇 张辉 谭浩然 彭伟星 吴昊天 曾凯 摘 要 智能机器人在服务国家重大需求, 引领国民经济发展和保障国防安全中起到重要作用, 被誉为“制造业皇冠顶端的明珠”. 随着新一轮工业革命的到来, 世界主要工业国…...

精通线程池,看这一篇就够了

一&#xff1a;什么是线程池 当我们运用多线程技术处理任务时&#xff0c;需要不断通过new的方式创建线程,这样频繁创建和销毁线程&#xff0c;会造成cpu消耗过多。那么有没有什么办法避免频繁创建线程呢&#xff1f; 当然有&#xff0c;和我们以前学习过多连接池技术类似&…...

解决图片、视频地址加密问题

const getImgUrl async () > {const imgUrl 远程链接地址const response await fetch(imgUrl)//取出blob二进制const blob await response.blob()//url转为类似blob:http://localhost:9587/cf3265b9-75eb-4722-8e11-5048dec2564d//赋值给需要展示的地方const url URL.c…...

GPT引领学习之旅:一篇让程序员轻松掌握Elasticsearch的攻略

一、引言 随着大数据技术的飞速发展&#xff0c;程序员们面临着越来越多的挑战。Elasticsearch作为一款流行的开源搜索和分析引擎&#xff0c;已成为许多项目的重要组成部分。那么如何高效地学习并掌握Elasticsearch呢&#xff1f;在这篇文章中&#xff0c;我们将探讨如何运用…...

23种设计模式-仲裁者模式(Android应用场景介绍)

仲裁者模式是一种行为设计模式&#xff0c;它允许将对象间的通信集中到一个中介对象中&#xff0c;以减少对象之间的耦合度。本文将通过Java语言实现仲裁者模式&#xff0c;并介绍如何在安卓开发中使用该模式。 实现仲裁者模式 我们将使用一个简单的例子来说明仲裁者模式的实…...

【数据统计】— 极大似然估计 MLE、最大后验估计 MAP、贝叶斯估计

【数据统计】— 极大似然估计 MLE、最大后验估计 MAP、贝叶斯估计 极大似然估计、最大后验概率估计(MAP)&#xff0c;贝叶斯估计极大似然估计(Maximum Likelihood Estimate&#xff0c;MLE)MLE目标例子: 扔硬币极大似然估计—高斯分布的参数 矩估计 vs LSE vs MLE贝叶斯公式&am…...

Zookeeper学习笔记

Zookeeper入门 Zookeeper 是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache 项目。 Zookeeper工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c…...

go语言切片做函数参数传递+append()函数扩容

go语言切片函数参数传递append()函数扩容 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 二叉树递归go代码&#xff1a; var ans [][]int func pathSum(root *TreeNode, targetSum int) ( [][…...

2023.04.16 学习周报

文章目录 摘要文献阅读1.题目2.摘要3.简介4.Dual-Stage Attention-Based RNN4.1 问题定义4.2 模型4.2.1 Encoder with input attention4.2.2 Decoder with temporal attention4.2.3 Training procedure 5.实验5.1 数据集5.2 参数设置和评价指标5.3 实验结果 6.结论 MDS降维算法…...

【面试】如何设计SaaS产品的数据权限?

文章目录 前言数据权限是什么&#xff1f;设计原则整体方案RBAC模型怎么控制数据权限&#xff1f;1. 数据范围权限控制2. 业务对象操作权限控制3. 业务对象字段权限控制 总结 前言 一套系统的权限可以分为两类&#xff0c;数据权限和功能权限&#xff0c;今天我们从以下几个点…...

ansible管理变量

ansible变量简介 变量用于存储值&#xff0c;便于重复使用&#xff0c;可以简化项目的创建和维护。 变量命令规则 ansible变量的名称必须以字母开头&#xff0c;平且只能包含字母、数字和下划线&#xff0c;不允许有其他特殊字符。 变量范围 全局范围&#xff1a;从命令行…...

一种轻量级日志采集解决方案

前言 目前各大公司生产部署很多都是采用的集群微服务的部署方式&#xff0c;如果让日志散落在各个主机上&#xff0c;查询起来会非常的困难&#xff0c;所以目前我了解到的都是采用的日志中心来统一收集管控日志&#xff0c;日志中心的实现方案大多基于ELK(即Elasticsearch、L…...

【源码】Spring Cloud Gateway 是在哪里匹配路由的?

我们知道&#xff0c;经过网关的业务请求会被路由到后端真实的业务服务上去&#xff0c;假如我们使用的是Spring Cloud Gateway&#xff0c;那么你知道Spring Cloud Gateway是在哪一步去匹配路由的吗&#xff1f; 源码之下无秘密&#xff0c;让我们一起从源码中寻找答案。 入…...

BAT批处理基本命令

什么是 BAT 批处理脚本语言&#xff1f; BAT 批处理脚本语言是 Windows 系统自带的一种脚本语言&#xff0c;主要用于批量处理文件、目录、注册表、系统设置等任务。使用 BAT 批处理脚本语言可以节省大量手动操作的时间和精力。 如何编写 BAT 批处理脚本&#xff1f; 使用记事本…...