代码随想录笔记--哈希表篇

news2024/9/19 22:20:09

目录

1--有效的字母异位词

2--两个数组的交集

3--两数之和

4--四数相加II

5--三数之和

6--四数之和


1--有效的字母异位词

        利用哈希表存储每个字母的出现次数,比较两个字符串各个字母出现次数是否相等即可;

#include <iostream>
#include <string>
#include <vector>

class Solution {
public:
    bool isAnagram(std::string s, std::string t) {
        // 用数组实现哈希表
        std::vector<int> hash(26, 0);
        for(auto i = 0; i < s.length(); i++){
            hash[s[i] - 'a']++; 
        }
        // 遍历字符串t
        for(auto i = 0; i < t.length(); i++){
            hash[t[i] - 'a']--; 
        }
        // 遍历哈希表
        for(int i = 0; i < 26; i++){
            if(hash[i] != 0) return false;
        }
        return true;
    }
};

int main(int argc, char argv[]){
    // s = "anagram", t = "nagaram"
    std::string s = "anagram", t = "nagaram";
    Solution S1;
    bool res = S1.isAnagram(s, t);
    if(res) std::cout << "true" << std::endl;
    else std::cout << "false" << std::endl;
    return 0;
}

2--两个数组的交集

        利用哈希表存储数组1的元素,接着遍历数组2并判断元素是否存储在哈希表中,将交集元素存储并返回;

#include <iostream>
#include <unordered_set>
#include <vector>

class Solution {
public:
    std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {
        std::unordered_set<int> hash1;
        for(int i = 0; i < nums1.size(); i++){
            hash1.insert(nums1[i]);
        }
        std::unordered_set<int> result;
        for(int i = 0; i < nums2.size(); i++){
            if(hash1.find(nums2[i]) != hash1.end()){
                result.insert(nums2[i]);
            }
        }
        std::vector<int> res;
        for(auto item : result){
            res.push_back(item);
        }
        return res;
    }
};

int main(int argc, char argv[]){
    // nums1 = [1,2,2,1], nums2 = [2,2]
    std::vector<int> nums1 = {1, 2, 2, 1}, nums2 = {2, 2};
    Solution S1;
    std::vector<int> res = S1.intersection(nums1, nums2);
    for(auto item : res) std::cout << item << " ";
    std::cout << std::endl;
    return 0;
}

3--两数之和

        利用哈希表存储,key 为 target - nums[i],value 为 i;遍历数组判断当前nums[i]是否在哈希表中出现,返回匹配的两个结果对应的索引即可;

#include <iostream>
#include <unordered_map>
#include <vector>

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

int main(int argc, char argv[]){
    // nums = [2,7,11,15], target = 9
    std::vector<int> nums = {2, 7, 11, 15};
    int target = 9;
    Solution S1;
    std::vector<int> res = S1.twoSum(nums, target);
    for(auto item : res) std::cout << item << " ";
    std::cout << std::endl;
    return 0;
}

4--四数相加II

        利用哈希表,其中key为两个数组对应元素的和,value为出现的次数;接着遍历剩下两个数组的元素和是否在哈希表中出现,记录出现的次数即匹配结果;

#include <iostream>
#include <unordered_map>
#include <vector>

class Solution {
public:
    int fourSumCount(std::vector<int>& nums1, std::vector<int>& nums2, std::vector<int>& nums3, std::vector<int>& nums4) {
        std::unordered_map<int, int> hash;
        for(int i = 0; i < nums1.size(); i++){
            for(int j = 0; j < nums2.size(); j++){
                hash[(nums1[i] + nums2[j])] ++;
            }
        }
        int res = 0;
        for(int i = 0; i < nums3.size(); i++){
            for(int j = 0; j < nums3.size(); j++){
                if(hash.find(0 - (nums3[i] + nums4[j])) != hash.end()){
                    res += hash[0 - (nums3[i] + nums4[j])];
                }
            }
        }
        return res;
    }
};

int main(int argc, char argv[]){
    // nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
    std::vector<int> nums1 = {1, 2}, nums2 = {-2, -1}, nums3 = {-1, 2}, nums4 = {0, 2};
    Solution S1;
    int res = S1.fourSumCount(nums1, nums2, nums3, nums4);
    std::cout << res << std::endl;
    return 0;
}

5--三数之和

6--四数之和

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

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

相关文章

常用的css样式

1&#xff1a;flex布局 .flex-between {display: flex;justify-content: space-between; }.flex-evenly {display: flex;justify-content: space-evenly; }.flex-end {display: flex;justify-content: flex-end; }.flex {display: flex; }.flex-center {display: flex;justify…

实验室的服务器和本地pycharm怎么做图传

参考 远程调试 qt.qpa.xcb: could not connect to display, echo DISPLAY为空[已解决]_功夫小象的博客-CSDN博客 先安装x11 MobaXterm x11-forwarding_C--G的博客-CSDN博客 我是在容器中搞得 1&#xff0c;安装qt5 pip install PyQt5 -i https://pypi.douban.com/simple …

vue 入门案例模版

vue 入门案例1 01.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> &l…

科创板50ETF期权交易:详细规则、费用、保证金和开户攻略

科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金&#xff08;ETF&#xff09;&#xff0c;旨在跟踪科创板50指数的表现&#xff0c;下文介绍科创板50ETF期权交易&#xff1a;详细规则、费用、保证金和开户攻略&am…

如何解决vue3.0+typescript项目提示找不到模块“./App.vue

一、解决方案如下&#xff1a;需在项目目录下加上下面这段代码即可&#xff01;如果没有vite-env.d.ts目录需要继续往下看 declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueCompon…

云服务器利用Docker搭建sqli-labs靶场环境

一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器&#xff0c;在Linux宝塔面板使用脚本安装 安装后&#xff0c;如下图&#xff1a;按照提示&#xff0c;在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址&#xff0c;登…

创建一个空的vue项目,配置及步骤

查看需要的环境及插件版本 创建vue命令 默认配置 手动配置 其他 hash和history的区别&#xff1a; hash 模式&#xff0c;url后&#xff0c;会带着#&#xff0c;改变hash&#xff0c;页面不会刷新&#xff0c;不会更改整个页面&#xff0c;只会更改#后面路由配置的内容&#x…

自定义overflow轨道样式,并且滚动条两边存在间距(滚动条不贴边显示)

最终效果 实现思路 border box-shadow 实现代码 ::-webkit-scrollbar {width: 20px;height: 4px; }::-webkit-scrollbar-thumb {border-radius: 20px;border: 6px solid rgba(0, 0, 0, 0);box-shadow: 14px 0px 0 #e3e3e3 inset; }::-webkit-scrollbar-thumb:hover {box-sh…

水经微图网页版界面功能说明

水经微图网页版&#xff0c;可轻松将关注的地点制作成您的个人地图。 您可以在任意位置添加标注点或绘制地图&#xff0c;查找地点并将其保存到您的地图中&#xff0c;或导入地图数据迅速制作地图并保存&#xff0c;您还可以运用图标和颜色展示个性风采&#xff0c;从而可让每…

低温控制中自增压液氮罐改进为杜瓦电热压力精密调节的解决方案

摘要&#xff1a;在液氮低温冷却控制系统中&#xff0c;目前大多数都采用自增压液氮罐作为低温源&#xff0c;但存在的问题是罐内压力无法精密调节、喷射液氮温度和流量不稳定、冷却温度无法准确控制以及冷却温度范围较窄等问题。为此本文提出了液氮罐内电加热压力调节解决方案…

Jupyter installation Tutorial

文章目录 1. 面向的系统2. 什么是Jupyter&#xff1f;3. 安装Python环境4. 安装Jupyter notebook5. Jupyter的启动和配置6. Jupyter的使用技巧7. conclusion参考文献 1. 面向的系统 Windows安装 2. 什么是Jupyter&#xff1f; Jupyter Notebook是一个开源的Web应用程序&…

如何优化vue项目 如何提升速度

优化 Vue 项目和提升速度可以从多个方面入手。下面是一些常见的优化技巧&#xff1a; 使用生产环境构建&#xff1a;在部署项目时&#xff0c;使用 Vue 的生产环境构建可以去除开发环境的调试工具和警告信息&#xff0c;减小项目的体积。 代码拆分和懒加载&#xff1a;将项目代…

哔哩哔哩引流脚本详细使用教学分享,B站引流脚本定制详细实操演示

大家好我是你们的小编一辞脚本&#xff0c;今天给大家分享新的知识&#xff0c;很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码&#xff0c;给大家分享一下哔哩引流脚本的知识和视频演示 不懂的小伙伴可以认真看一下&#xff0c;我们…

yum源以及rpm安装包配置、yum源冲突、yum-config-manager命令找不到、curl: (35)、docker镜像重复拉取失败

yum源配置并解决冲突、curl: (35&#xff09;、docker镜像重复拉取失败、yum-config-manager命令找不到的解决方法 有的时候按照教程走&#xff0c;可能会设置yum源&#xff0c;设置后用yum下载东西很有可能或造成冲突 yum源冲突的解决方式无非有两种&#xff1a;1. 删除冲突软…

Android Native Code开发学习(一)环境配置

Android Native Code开发学习&#xff08;一&#xff09; 本教程为native code学习笔记&#xff0c;希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04&#xff0c;当然windows也是可以的&#xff0c;区别不大 环境配置 首先我们新建一个native C项目 然后我们下载NDK和C…

安卓手机版陌陌引流脚本,陌陌同城引流的方法详细教学

大家好我是你们的小编一辞脚本&#xff0c;今天给大家分享新的知识&#xff0c;很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码&#xff0c;给大家分享一下qq引流脚本的知识和视频演示 不懂的小伙伴可以认真看一下&#xff0c;我们一…

高基数类别特征预处理:平均数编码 | 京东云技术团队

一 前言 对于一个类别特征&#xff0c;如果这个特征的取值非常多&#xff0c;则称它为高基数&#xff08;high-cardinality&#xff09;类别特征。在深度学习场景中&#xff0c;对于类别特征我们一般采用Embedding的方式&#xff0c;通过预训练或直接训练的方式将类别特征值编…

TMS32F28335中的数据类型

TMS32F28335中的数据类型 手册下载处 操作系统中的数据类型

探索AIGC人工智能(Midjourney篇)(三)

文章目录 Midjourney出图如何转高清图 Midjourney生成3D质感图标 Midjourney生成微信表情包 MJ设置Niji5漫画模式 Midjourney探索美食摄影的奇妙之旅 Midjourney蛋糕创意设计 Midjourney生成高质量电商主图 Midjourney家具设计 Midjourney出图如何转高清图 1、调整画面比例…

异或^实现数据加密

异或是一种二进制的位运算&#xff0c;符号以 XOR 或 ^ 表示。 1.1运算规则 相同为0&#xff0c;不同为1&#xff0c;即 1 ^ 1 0 0 ^ 0 0 1 ^ 0 1 由运算规则可知&#xff0c;任何二进制数与零异或&#xff0c;都会等于其本身&#xff0c;即 A ^ 0 A。 1.2 异或性质 …