专题九——哈希表

news2024/11/5 1:20:32

目录

0简介

1两数之和 

2判定是否互为字符重排 

3存在重复元素

4存在重复元素 II

5字母异位词分组 


0简介

1两数之和 

 oj链接:两数之和

解法1
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n=nums.size();
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(nums[i]+nums[j]==target)
                {
                    return {i,j};
                }
            }
        }
        return {0,0};
    }
};

//解法2
class Solution
{
public:
    vector<int> twoSum(vector<int> &nums, int target)
    {
        unordered_map<int, int> hash;
        for (int i = 0; i < nums.size(); i++)
        {
            if (hash.find(target - nums[i]) != hash.end())
            {
                return {hash[target - nums[i]], i};
            }
            hash[nums[i]] = i;
        }
        return {0, 0};
    }
};

2判定是否互为字符重排 

 oj链接:判定是否互为字符重排

//解法1
class Solution
{
public:
    bool CheckPermutation(string s1, string s2)
    {
        if (s1.size() != s2.size())
            return false;
        int hash1[26] = {0}, hash2[26] = {0};
        for (auto &s : s1)
            hash1[s - 'a']++;
        for (auto &s : s2)
            hash2[s - 'a']++;
        for (int i = 0; i < 26; i++)
        {
            if (hash1[i] != hash2[i])
                return false;
        }
        return true;
    }
};

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

3存在重复元素

oj链接:存在重复元素

创建hash<数值,下标>:边存边判断即可 

class Solution
{
public:
    bool containsDuplicate(vector<int> &nums)
    {
        unordered_map<int, int> hash;
        for (auto &num : nums)
        {
            if ((++hash[num]) == 2)
                return true;
        }
        return false;
    }
};

4存在重复元素 II

oj链接:存在重复元素 II 

创建hash<数值 下标> 进行存储时判断hash里有没有值;如果有将进行判断abs(i-j)<=k;没有进行存储(如果已经储存过了将其覆盖掉:因为判断为true时要两个值越靠近才有可能满足)

// 暴力:三层for循环
class Solution
{
public:
    bool containsNearbyDuplicate(vector<int> &nums, int k)
    {
        unordered_map<int, vector<int>> hash;
        for (int i = 0; i < nums.size(); i++)
            hash[nums[i]].push_back(i);
        for (int i = 0; i < nums.size(); i++)
        {
            vector<int> tmp = hash[nums[i]];
            if (tmp.size() >= 2)
            {
                for (int i = 0; i < tmp.size(); i++)
                {
                    for (int j = i + 1; j < tmp.size(); j++)
                    {
                        if (abs(tmp[i] - tmp[j]) <= k)
                            return true;
                    }
                }
            }
        }
        return false;
    }
};

// 优化
class Solution
{
public:
    bool containsNearbyDuplicate(vector<int> &nums, int k)
    {
        unordered_map<int, int> hash;
        for (int i = 0; i < nums.size(); i++)
        {
            if (hash.count(nums[i]) && abs(i - hash[nums[i]]) <= k)
                return true;
            hash[nums[i]] = i; // 覆盖不影响结果
        }
        return false;
    }
};

5字母异位词分组 

 oj链接:字母异位词分组

 

class Solution
{
public:
    vector<vector<string>> groupAnagrams(vector<string> &strs)
    {
        unordered_map<string, vector<string>> hash;
        for (auto &str : strs)
        {
            // 排序
            string tmp = str;
            sort(tmp.begin(), tmp.end());
            hash[tmp].push_back(str);
        }
        vector<vector<string>> ret;
        for (auto &[x, y] : hash)
        {
            ret.push_back(y);
        }
        return ret;
    }
};

以上便是全部内容;有问题欢迎在评论区指正,感谢观看! 

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

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

相关文章

unet中的attn_processor的修改(用于设计新的注意力模块)

参考资料 文章目录 unet中的一些变量的数据情况attn_processorunet.configunet_sd 自己定义自己的attn Processor &#xff0c;对原始的attn Processor进行修改 IP-adapter中设置attn的方法 参考的代码&#xff1a; 腾讯ailabipadapter 的官方训练代码 unet中的一些变量的数据…

客户端时间 与 服务器时间

对客户端时间和服务器有概念&#xff0c;但从来没有这么直观地观察过。直到有一天打开了长久未使用的mac&#xff0c;第一次对时间有了直观的概念&#xff1a; 打开之后就有了上面这样的提示“您的时钟慢了”… 我看了下电脑的时间&#xff0c;然后打开F12获取了下时间&#x…

VLAN高级特性:VLAN聚合

一、VLAN聚合的概述 在一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个VLANIF接口实现广播域之间的互通&#xff0c;这导致了在一些情况下造成了IP地址的浪费。 因为一个VLAN对应的子网中&#xff0c;子网号&#xff0c;子网广播地址、子网网关地址不能用作VLAN内…

Rust 力扣 - 2653. 滑动子数组的美丽值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的的窗口 因为数据范围比较小&#xff0c;所以我们可以通过计数排序找到窗口中第k小的数 如果小于0&#xff0c;则该窗口的美丽值为第k小的数如果大于等于0&#xff0c;则该窗口的美丽值为0 题…

2024网鼎杯青龙组wp:Crypto1

题目 附件内容如下 from Crypto.Util.number import * from secret import flag from Cryptodome.PublicKey import RSAp getPrime(512) q getPrime(512) n p * q d getPrime(299) e inverse(d,(p-1)*(q-1)) m bytes_to_long(flag) c pow(m,e,n) hint1 p >> (51…

《JVM第2课》类加载子系统(类加载器、双亲委派)

类加载系统加载类时分为三个步骤&#xff0c;加载、链接、初始化&#xff0c;下面展开介绍。 文章目录 1 类加载器1.1 引导类加载器&#xff08;BootStrapClassLoader&#xff09;1.2 拓展类加载器&#xff08;ExtClassLoader&#xff09;1.3 应用类加载器&#xff08;AppClas…

记住电机原理及几个重要公式,搞清楚电机so easy

电机作为电力转换设备&#xff0c;在现代工业、交通以及生活中发挥着无处不在的作用。无论是微型电动机还是大型发电机&#xff0c;它们的工作原理均基于一定的物理学和电磁学原理。 一、电机的基本原理 电机的基本原理可以概括为电能与机械能之间的相互转换。电动机通过电流在…

软件(2)

操作系统 windows、unix、linux、dos都属于操作系统 操作系统的核心部分的主要特点是【常驻内存】 【多用户分时系统】是当今计算机操作系统中最普遍使用的一类操作系统 操作系统的主要功能是【调度】、【监控】和【维护】计算机系统 负责管理计算机中各种独立的硬件&#xff0…

深度学习常用开源数据集介绍【持续更新】

DIV2K 介绍&#xff1a;DIV2K是一个专为 图像超分辨率&#xff08;SR&#xff09; 任务设计的高质量数据集&#xff0c;广泛应用于计算机视觉领域的研究和开发。它包含800张高分辨率&#xff08;HR&#xff09;训练图像和100张高分辨率验证图像&#xff0c;每张图像都具有极高…

计算机图形学中向量相关知识chuizhi

一、向量加法 平行四边形法则 两个向量统一起点&#xff0c;构成平行四边形&#xff0c;对角线为向量加和的结果 三角形法则 两个向量尾首相连&#xff0c;从a起点连接到b终点&#xff0c;为向量加法的结果 多向量首尾相连的加法结果为第一个向量的起点到最后一个向量的终点…

[LitCTF 2023]只需要nc一下~-好久不见6

先nc一下&#xff0c;连接上 ls打开查看里面有什么文件 cat 查看里面有什么内容 这个 Dockerfile 构建了一个基于 Python 3.11 的镜像&#xff0c;将当前目录的文件复制到镜像的 /app 目录&#xff0c;设置了一个环境变量 FLAG&#xff0c;并将其值写入 /flag.txt 文件。工作目…

软考高级之系统架构师之安全攻防技术

攻防包括攻击和防御两部分。 攻击 安全威胁 信息系统的安全威胁来自于&#xff1a; 物理环境&#xff1a;对系统所用设备的威胁&#xff0c;如&#xff1a;自然灾害&#xff0c;电源故障&#xff0c;数据库故障&#xff0c;设备被盗等造成数据丢失或者信息泄露通信链路&…

VLAN间通信以及ospf配置

目录 1.基础知识介绍 1.1 什么是VLAN&#xff1f; 1.2 VLAN有什么用&#xff1f; 1.3 不同VLAN如何实现通信&#xff1f; 1.4 什么是路由汇总&#xff1f; 1.4.1 路由汇总的好处&#xff1a; 2. 实验 2.1 网络拓扑设计 2.2 实验配置要求 2.2.1 三层交换配置&#xff…

ChatGPT变AI搜索引擎!以后还需要谷歌吗?

前言 在北京时间11月1日凌晨&#xff0c;正值ChatGPT两岁生日之际&#xff0c;OpenAI宣布推出最新的人工智能搜索体验&#xff01;具备实时网络功能&#xff01;与 Google 展开直接竞争。 ChatGPT搜索的推出标志着ChatGPT成功消除了即时信息这一最后的短板。 这项新功能可供 …

使用python画一颗圣诞树

具体效果&#xff1a; 完整代码&#xff1a; import random def print_christmas_tree(height): # 打印圣诞树的顶部 for i in range(height): # 打印空格&#xff0c;使树居中 for j in range(height - i - 1): print(" ", end"") # 打印星号&…

省级-碳排放相关数据(1990-2022年)

关键指标&#xff1a; 地区&#xff1a;数据涵盖了中国各省级行政区&#xff0c;为我们提供了一个全面的视角来观察不同地区的碳排放情况。年份&#xff1a;数据跨越了1990年至2022年&#xff0c;这为我们提供了一个长期的时间序列&#xff0c;以观察碳排放的变化趋势。总碳排…

评估 机器学习 回归模型 的性能和准确度

回归 是一种常用的预测模型&#xff0c;用于预测一个连续因变量和一个或多个自变量之间的关系。 那么&#xff0c;最后评估 回归模型 的性能和准确度非常重要&#xff0c;可以帮助我们判断模型是否有效并进行改进。 接下来&#xff0c;和大家分享如何评估 回归模型 的性能和准…

WPF+MVVM案例实战(二十)- 制作一个雷达辐射效果的按钮

文章目录 1、案例效果2、文件创建与代码实现1、创建文件2、图标资源文件3、源代码获取1、案例效果 2、文件创建与代码实现 1、创建文件 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 RadarEffactWindow.xaml 。代码功能分两个部分完成,一个是样式,一个是动画。页…

小程序配置消息推送

配置以上信息后&#xff0c;点击提交时&#xff0c; 服务器需要配置GET请求&#xff0c;同时验证签名&#xff0c;签名通过后&#xff0c;返回参数echo_str&#xff0c; 切忌&#xff1a; 一定转化为int类型; python fastapi实现代码如下: async def callback_file(request: …

【大模型开发指南】llamaindex配置deepseek、jina embedding及chromadb实现本地RAG及知识库(win系统、CPU适配)

说一些坑&#xff0c;本来之前准备用milvus&#xff0c;但是发现win搞不了&#xff08;docker都配好了&#xff09;。然后转头搞chromadb。这里面还有就是embedding一般都是本地部署&#xff0c;但我电脑是cpu的没法玩&#xff0c;我就选了jina的embedding性能较优&#xff08;…