哈希表【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&am…

一个跨平台、跨空间支持多用户的远程云备份系统

多可云备份系统用于将一台服务器上的数据&#xff0c;高速备份到另一台或多台服务器上。无论这些服务器都在同一个局域网内&#xff0c;还是都在云服务器上&#xff0c;或者是分别在局域网内和云服务器上&#xff0c;使用多可云备份系统&#xff0c;都能够高速、高效、精确地完…

AntV和AntD之间的区别与联系

前言&#xff1a;最近在调研前端的一些框架&#xff0c;技术栈主要是用react&#xff0c;所以找到了2个十分相似解决方案&#xff0c;拿来对比一下&#xff08;antd和antv都是基于react&#xff09; antd对比antv antd antv 解决方案企业级 UI 设计语言数据可视化解决方案提供…

每日一练 | 华为认证真题练习Day142

1、路由器的主要功能&#xff0c;以下说法错误的是&#xff1f;&#xff08;多选&#xff09; A. 通过多种协议建立路由表 B. 根据路由表指导数据转发 C. 根据收到数据包的源IP地址进行转发 D. 实现相同网段设备之间相互通信 2、管理员发现无法通过TFTP传输文件到华为AR200…

【设计模式】策略模式设计-电影票打折功能

任务二&#xff1a;使用策略模式设计电影票打折功能 某电影院售标系统为不同类型的用户提供了不同的打折方式&#xff08;Discount&#xff09;&#xff0c;学生凭学生证可享受8折优惠**&#xff08;StudentDiscount&#xff09;&#xff0c;儿童可享受减免10元的优惠&#xf…

使用gunicorn部署django项目时,发现静态文件加载失败问题

本文主要介绍如何配置Niginx加载Django的静态资源文件&#xff0c;也就是Static 1、首先需要将Django项目中的Settings.py 文件中的两个参数做以下设置&#xff1a; STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, static) 2、将 STATICFILES_DIRS [ os.p…

开关电源有哪些EMI整改?|深圳比创达电子EMC

某控制产品在进行辐射发射测试时&#xff0c;发现测试结果超标&#xff0c;辐射发射测试结果如下图所示&#xff1a; 控制产品在去掉发射源之前&#xff0c;就在各外部端口采取了各种滤波措施&#xff0c;结果并无明显作用&#xff0c;即使把所有相关外部引线全部拿走(只剩下电…

js 防抖函数、节流函数

/** 节流函数 */ export function throttle(func, wait 100) {let isDoing falsereturn function (...rest) {if (isDoing) returnisDoing truesetTimeout(() > {func(...rest)isDoing false}, wait)} }/** 防抖函数 */ export function debounce(func, wait 100) {let…

微信小程序开发:地图路线规划全流程,超详细!!!(包括遇到的问题解决)

目录 效果展示 第一章 准备阶段 1.1 使用uniapp搭建微信小程序 1.2 条件1&#xff1a;appId&#xff08;微信小程序appId&#xff09; 1.3 条件2&#xff1a;key&#xff08;腾讯位置服务申请的key&#xff09; 1.4 条件3&#xff1a;插件appId&#xff08;微信小程序插件…

C语言每日一题(41)循环队列

力扣 622 循环队列 题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前…

分布式版本管理系统---->Git(Linux---centos(保姆式)讲解1)

文章目录: 1:什么是Git以及作用 2.Git的基本操作过程(创建git仓库,配置仓库的配置) 3.git的工作区&#xff0c;暂存区&#xff0c;版本库的关系 4.将文件添加到版本库&#xff1a;git add 与git commit -m命令 5.git log查看日志的引入 6.查看.git文件中的内容 7.修改文件内容查…

图扑数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能&#xff0c;是指在电网负荷低谷期将电能用于压缩空气&#xff0c;在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

探索什么样的导线,适合做433的天线

​​​​​​一、理论基础 (3 封私信 / 18 条消息) 为什么天线的材质会影响接收电磁波的效果&#xff1f; - 知乎 (zhihu.com) 电感基础3——RLC电路&#xff0c;帮助你轻松理解“阻抗”的概念 - 知乎 (zhihu.com) 一文读懂介电性能---介电常数 - 知乎 (zhihu.com) 433MHz 至…

亚马逊,shopee,lazada自养号测评补单,保护店铺信誉提升自然流量

测评补单对跨境电商卖家来说&#xff0c;是运营店铺的重要手段之一。一个产品想要有更好的曝光、更高的转化率&#xff0c;需要有一个好的Listing排名。Review在各平台Listing中占据着较高的权重&#xff0c;一个好的Review能给用户带来良好的观感&#xff0c;使用户对产品的信…

【EI会议征稿】第五届人工智能、网络与信息技术国际学术会议(AINIT 2024)

第五届人工智能、网络与信息技术国际学术会议&#xff08;AINIT 2024&#xff09; 第五届人工智能、网络与信息技术国际学术会议&#xff08;AINIT 2024&#xff09;将于2024年3月22-24日在中国南京举行。本届会议将主要关注人工智能、网络与信息技术面临的新的挑战问题和研究…

使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案

一、延长k8s证书时间 查看 apiserver 证书有效时间&#xff1a;默认是一年的有效期 [rootxuegod63 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not 延长证书过期时间 1.把 update-kubeadm-cert.sh 文件上传到 xuegod63 节点 vim update-…

写给初学者的 HarmonyOS 教程 -- 页面路由(router)

页面路由&#xff08;router&#xff09;是指在应用程序中实现不同页面之间的跳转和数据传递。 HarmonyOS 提供了 Router 模块&#xff0c;通过不同的 url 地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。 类似这样的效果&#xff1a; 页面跳转是…

代理服务器如何保护用户隐私和安全?

目录 前言 一、代理服务器的工作原理 二、代理服务器的隐私保护机制 1. IP地址隐藏 2. 安全加密 3. 访问控制 三、代理服务器的安全问题 1. 黑客攻击 2. 版本漏洞 3. 恶意软件 四、总结 前言 代理服务器是一种位于用户与服务器之间的中介&#xff0c;可以隐藏用户的…

VSCode 配置JavaScript环境

首先下载node.js&#xff0c;我的电脑是Windows10版本 之后安装node 在这里插入图片描述 安装成功 如果发现运行的时候还是报错&#xff0c;则添加环境变量试试 在Windows10版本的搜索框&#xff0c;搜索环境变量&#xff0c;点击 D:\Program Files\nodejs\ %NODE_HOME…

并行流(Parallel Streams)

并行流&#xff08;Parallel Streams&#xff09;是Java 8引入的一种并行处理集合数据的机制&#xff0c;它允许将操作并行化以提高处理速度。然而&#xff0c;并行流可能存在一些安全问题&#xff0c;特别是在多线程环境下。 以下是一些与并行流相关的安全问题&#xff1a; 共…