哈希表【1】

在这里插入图片描述

文章目录

    • 🤔0.哈希表
    • 🌼1. 两数之和
      • 🌻1. 题目
      • 🌷2. 算法原理
      • 🌺3. 代码实现
    • 🍈面试题 01.02. 判定是否互为字符重排
      • 🍌1. 题目
      • 🍏2. 算法原理
      • 🍓3. 代码实现

🤔0.哈希表

哈希表用于“快速”查找某个元素,在刷题的时候,如果数据范围不大,我们可以用数组来模拟一个建议的哈希表,C++里面的哈希表是unordered_map,关于哈希表的内容可以查看此篇文章:哈希(hash)——【C++实现】

🌼1. 两数之和

🌻1. 题目

题目链接:1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

**进阶:**你可以想出一个时间复杂度小于 O(n2) 的算法吗?

🌷2. 算法原理

解法一:暴力枚举

这里固定一个元素,然后遍历后面的元素,看看有没有和为target的,两层for循环,时间复杂度为O(N2)

解法二:哈希表

我们找个一个元素之后,只需要看数组里面是否有target-nums[i]的值,要快速确定一个值,采用哈希表。

这里因为要返回元素的下标,所以我们哈希表里面的映射为<nums[i], i>

不要一次性将元素全部丢进哈希表,例如target = 4,数组为[2,3,4,5],如果先全部丢进去,那么到2的时候,哈希表里面有hash[nums[i]] == target - nums[i]的,但是这个情况明显不符合

🌺3. 代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target){unordered_map<int, int> hash;for(int i = 0; i < nums.size(); i++){int x = target - nums[i];if(hash.count(x))   return {i,hash[x]};hash[nums[i]] = i;}return {-1,-1};}
};

运行结果:

image-20231205153056390

🍈面试题 01.02. 判定是否互为字符重排

🍌1. 题目

题目链接:面试题 01.02. 判定是否互为字符重排

给定两个由小写字母组成的字符串 s1s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca"
输出: true 

示例 2:

输入: s1 = "abc", s2 = "bad"
输出: false

说明:

  • 0 <= len(s1) <= 100
  • 0 <= len(s2) <= 100

🍏2. 算法原理

解法一:排序+比较

这里可以直接用sort将这2个字符串排序,然后直接比较这两个字符串是否相等即可,排序sort的时间复杂度为O(2N*logN)

解法一:哈希表

这里也能直接统计字符出现的个数,如果这两个字符串字符都相同且出现的个数一样,即代表互为重排列。

这里要创建1个哈希表,但是只有26个英文字母,所以直接用数组模拟哈希表即可。

时间复杂度为O(2N)

🍓3. 代码实现

排序+比较

 class Solution {
public:bool CheckPermutation(string s1, string s2){if(s1.size() != s2.size())	return false;sort(s1.begin(),s1.end());sort(s2.begin(),s2.end());return s1 == s2;}
};

哈希表:

class Solution {
public:bool CheckPermutation(string s1, string s2){if(s1.size() != s2.size())  return false;int hash[26] = { 0 };for(auto ch1 : s1)hash[ch1 - 'a']++;for(auto ch2 : s2){hash[ch2 - 'a']--;if(hash[ch2- 'a'] < 0)   return false;}return true;}
};

运行结果:
image-20231205155224490

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

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

相关文章

Cmake时遇到Could Not find CURL问题

操作系统&#xff1a;Ubuntu 20.04 cmake编译的时候&#xff0c;出现下述错误Could Not find CURL。 结合上述错误&#xff0c;又去看了CMakelist文件&#xff0c;看到CURL的最小版本需要7.28.0。 首先确认一下自己的curl是否安装&#xff0c;版本号是多少&#xff0c;结果如下…

已知线段的两端点a、b,求线段外一点到线段的距离

公式推导过程已经不存在 仅剩下代码 贴出来&#xff0c;方便使用 // 计算点p到直线a,b的距离&#xff0c;OpenCVstatic float distancePointToLineCV(const cv::Point2f& p, const cv::Point2f& a, const cv::Point2f& b){float v1 std::fabs((b.y - a.y) * p.x…

Pytest接口自动化测试框架搭建模板

auto_api_test 开发环境: Pycharm 开发语言&版本: python3.7.8 测试框架: Pytest、测试报告: Allure 项目源码Git地址 项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用config – 配置文件目录data…

学习设计模式的网站

Refactoring and Design Patternshttps://refactoring.guru/

vue.js怎么保证计算精度

为什么js计算会丢失精度&#xff1f; JavaScript 中的精度丢失问题通常出现在处理浮点数时。 这是因为 JavaScript 使用双精度浮点数格式&#xff08;64位&#xff09;&#xff0c;无法精确表示所有的小数。举例来说&#xff0c;尝试计算 0.1 0.2 会得到一个近似值 0.300000…

华为云RDS通用型(x86) vs 鲲鹏(ARM)架构的性能对比

概述 之前&#xff0c;我们对比了阿里云RDS的经济版&#xff08;ARM&#xff09;与x86版的性价比&#xff0c;这次我们来看看华为云的RDS MySQL的“通用型”(x86)与“鲲鹏通用增强型”(ARM)版本的情况如何。 这里依旧选择了用户较为常用的4c16g的规格进行测试&#xff0c;测试…

【Rust与AI】概览和方向

本系列主要介绍Rust与AI的那些天作之合&#xff08;开源项目&#xff09;&#xff0c;我们会以开源项目代码阅读的方式推进&#xff0c;以Rust为主&#xff0c;同时科普AI相关知识&#xff0c;目的是让更多非算法、非Rust的程序员进一步学习Rust和AI相关知识。当然&#xff0c;…

【Python】 pip 常用命令及相关作用和使用场景

pip是Python的包管理工具&#xff0c;它允许开发者安装、升级和管理Python软件包。以下是一些常用的pip命令&#xff1a; 1. **列出已安装的包**&#xff1a; pip list 或者 pip freeze 2. **安装包**&#xff1a; pip install [package-name]…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore10、分支基础应用1、本地文件提交到远程仓库 Git&#xff1a;一个开源的分布式版本控制系统&#xff0c;它可以在本地和…

AIGC创作ChatGPT源码+AI绘画(Midjourney绘画)+支持GPT-4-Turbo模型+DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

嵌入式硬件和软件哪个好?

嵌入式硬件和软件哪个好? 嵌入式软硬件工程师哪个更有前途呢?一起来看看。 嵌入式是分为软硬件工程师的&#xff0c;首先我们先来看看嵌入式硬件工程师吧! 嵌入式硬件开发工程师主要编写嵌入式系统硬件总体方案和详细方案&#xff0c;要求理解嵌入式系统架构&#xff0c;有一…

智能优化算法应用:基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.世界杯算法4.实验参数设定5.算法结果6.参考文献7.…

java学习part36set

157-集合框架-Set不同实现类的对比及Set无序性、不可重复性的剖析_哔哩哔哩_bilibili 1.Set 加入集合的时候会先调用重写的hash方法计算hash值&#xff0c;不一样就加入。 如果hash一样且equals也是true就是重复 &#xff0c;调equals是为了保险&#xff0c;保证排除hash碰撞…

MySQL数据误删除恢复

1.1 问题简述 开发反馈误删除了部分业务数据&#xff0c;需要恢复数据。 这里采用binlog2sql工具进行数据回滚。 1.2 环境 CentOS Linux release 7.4.1708 (Core) mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL) 1.3 数据库开启binlog 因为数据库serve…

Windows环境下RocketMQ的安装及配置

目录 1.环境准备2.下载RocketMQ3.配置RocketMQ环境变量4.启动RecoketMQ4.1启动 name server4.2 启动 broker 5、启动报错问题解决5.1 java_HOME变量找不到5.2 启动闪退问题 1.环境准备 JDK和Maven需要先安装好。 RocketMQ是用Java语言写的&#xff0c;所以需要JDK的支持。 后面…

Mac电脑vm虚拟机 VMware Fusion Pro中文 for mac

VMware Fusion Pro是一款功能强大的虚拟机软件&#xff0c;适用于需要在Mac电脑上运行其他操作系统的用户。它具有广泛的支持、快速稳定的特点以及多种高级功能&#xff0c;可以满足用户的各种需求和场景。 多操作系统支持&#xff1a;VMware Fusion Pro允许在Mac电脑上运行多…

Wireshark中的TCP协议包分析

Wireshark可以跟踪网络协议的通讯过程&#xff0c;本节通过TCP协议&#xff0c;在了解Wireshark使用的基础上&#xff0c;重温TCP协议的通讯过程。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传…

人工智能-机器翻译:技术发展与代码实战

在本文中&#xff0c;我们深入探讨了机器翻译的历史、核心技术、特别是神经机器翻译&#xff08;NMT&#xff09;的发展&#xff0c;分析了模型的优化、挑战及其在不同领域的应用案例。同时&#xff0c;我们还提出了对未来机器翻译技术发展的展望和潜在的社会影响。 关注TechLe…

Shopee买家通系统自动下单更方便

Shopee购物平台的买家通系统为用户提供了一种便捷的自动下单方式&#xff0c;通过这一系统&#xff0c;用户可以轻松实现在虾皮平台购买商品的自动化操作。下面将介绍具体的操作流程&#xff0c;确保用户可以顺利完成整个购物流程。 首先&#xff0c;用户需要准备一个可用的虾皮…

Leetcode—205.同构字符串【简单】

2023每日刷题&#xff08;五十&#xff09; Leetcode—205.同构字符串 算法思想 参考自k神思路 实现代码 class Solution { public:unordered_map<char, char> s2t, t2s;bool isIsomorphic(string s, string t) {int n s.size();for(int i 0; i < n; i) {char …