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

算法刷题-哈希表

算法刷题-哈希表

242. 有效的字母异位词

给定两个字符串 *s**t* ,编写一个函数来判断 *t* 是否是 *s* 的字母异位词。

**注意:**若 *s**t* 中每个字符出现的次数都相同,则称 *s**t* 互为字母异位词。

思路

用一个哈希表来记录第一个字符串每个字符出现的次数,然后遍历第二个字符串,减去他的字母出现的次数,

最后如果哈希表每个值都是0,说明符合题意

代码

    bool isAnagram(string s, string t) {map<char,int> m;for(char c:s) m[c]++;for(char c:t) m[c]--;for(auto [x,y]:m) {if(y!=0) return false;}return true;}

349. 两个数组的交集

给定两个数组 nums1nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

思路

用一个set记录第一个数组出现了哪些元素,然后再开一个set记录两个数组都出现的元素即可

代码

    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> res;set<int> s,s2;for(int x:nums1) s.insert(x);for(int x:nums2){if(s.count(x)) s2.insert(x);} for(int x:s2) res.push_back(x);return res;}

202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

思路

写一个函数f来计算每次变化后的结果

用一个哈希表来存n能变到哪些数字,如果第二次变到哈希表里的数字,说明有循环,退出即可

代码

    int f(int n){int x=0;while(n) x+=(n%10)*(n%10),n/=10;return x;}bool isHappy(int n) {set<int> s;while(1){if(n==1) return 1;if(s.count(n)) return 0;s.insert(n);n=f(n);}}

1. 两数之和

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

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

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

思路

用一个哈希表记录每个数字出现的位置

再遍历一次数组,如果nums[i]-target在哈希表中存在,说明找到了,直接返回

代码

    vector<int> twoSum(vector<int>& nums, int target) {map<int,int> m;int n=nums.size();for(int i=0;i<n;i++) m[nums[i]]=i;for(int i=0;i<n;i++){int j=m[target-nums[i]];if(j!=0&&j!=i) return {i,j};}return {0,0};}

454. 四数相加 II

给你四个整数数组 nums1nums2nums3nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
思路

先将nums1nums2所有可能得到的值的组合存到哈希表中

在遍历nums3nums4,判断0-nums3[i]-nums4[j]在不在哈希表中

时间复杂度为 O ( n 2 ) O(n^2) O(n2)

代码

    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {map<int,int> m;for(int x:nums1)for(int y:nums2)m[x+y]++;int res=0;for(int x:nums3)for(int y:nums4)if(m[0-x-y]!=0)res+=m[0-x-y];return res;}

383. 赎金信

给你两个字符串:ransomNotemagazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false

magazine 中的每个字符只能在 ransomNote 中使用一次。

思路

将第二个字符串的每个字符出现的次数存入到哈希表中

在遍历第一个字符串,对应出现的次数减去

最后判断是否有出现次数<0的字母,说明不符合题意

代码

    bool canConstruct(string ransomNote, string magazine) {map<char,int> m;for(char c:magazine) m[c]++;for(char c:ransomNote) m[c]--;for(auto [x,y]:m) if(y<0) return false;return true;}

15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

**注意:**答案中不可以包含重复的三元组。

思路

先对数据进行排序,然后遍历一次数组,双指针不断缩小范围

代码

    vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());vector<vector<int>> res;int n=nums.size();for(int k=0;k<n-2;k++){if(nums[k]>0) break;if(k>0&&nums[k]==nums[k-1]) continue;int i=k+1,j=n-1;while(i<j){int sum=nums[k]+nums[i]+nums[j];if(sum<0)while(i<j &&nums[i]==nums[++i]);else if(sum>0) while(i<j && nums[j]== nums[--j]);else{res.push_back({nums[i],nums[j],nums[k]});while(i<j&&nums[i]==nums[++i]);while(i<j&&nums[j]==nums[--j]);}}}return res;}

18. 四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

  • 0 <= a, b, c, d < n
  • abcd 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

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

思路

和三数之和一样,双指针算法。

代码

    vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());vector<vector<int>> res;int n=nums.size();for(int k=0;k<n;k++){if(nums[k]>target&&nums[k]>=0) break;if(k>0 &&nums[k]==nums[k-1] ) continue;for(int i=k+1;i<n;i++){if(i>k+1 &&nums[i]==nums[i-1]) continue;int l=i+1,r=n-1;while(l<r){long long sum=(long long)nums[k]+nums[i]+nums[l]+nums[r];if(sum>target) r--;else if(sum<target) l++;else {res.push_back({nums[k],nums[i],nums[l],nums[r]});while(l<r && nums[l]==nums[l+1])l++;while(l<r &&nums[r]==nums[r-1]) r--;r--,l++;}}}}return res;}

相关文章:

算法刷题-哈希表

算法刷题-哈希表 242. 有效的字母异位词 给定两个字符串 *s* 和 *t* &#xff0c;编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意&#xff1a;**若 *s* 和 *t* 中每个字符出现的次数都相同&#xff0c;则称 *s* 和 *t* 互为字母异位词。 思路 用一个哈希表来记…...

2023NOIP A层联测17 黑暗料理

题目大意 给出一个长度为 n n n的序列 a i a_i ai​&#xff0c;要求删去若干个数&#xff0c;使得剩下的数中任意两个数都不是质数。在满足条件的情况下最多能保留几个数。 有 T T T组数据。 1 ≤ T ≤ 4 , 1 ≤ n ≤ 750 , 1 ≤ a i ≤ 1 0 9 1\leq T\leq 4,1\leq n\leq 75…...

关于nacos的配置获取失败及服务发现问题的排坑记录

nacos配置更新未能获取到导致启动报错 排查思路&#xff1a; 1、是否添加了nacos的启动pom依赖 参考&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><…...

【QT】其他常用控件1

新建项目 scrollArea 滚动 toolBox 插入 tabWidget stackedWidget 切换 索引是0 运行后&#xff0c;没有切换按钮&#xff0c;结合pushbutton&#xff0c;加两个Button 代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent)…...

交换机/防火墙-基础配置-23.10.11

update 优化了目录逻辑 -10.24.2023 一.前置知识 1.MAC地址 交换机在给主机之间传递信息包时&#xff0c;通过MAC地址来标识每台主机 主机间发生信息包交换时&#xff0c;交换机就会将通信过的主机的mac地址存下 dis mac-address 交换机转发的数据包中&#xff0c;会包含一…...

alibaba.fastjson的使用(四)-- Json字符 与 JsonObject 的相互转化

目录 1. Json字符串转JsonObject 2. JsonObject转Json字符串 1. Json字符串转JsonObject 使用到的方法1: static JSONObject parseObject(String text) 使用到的方法2: public String getString(String key) /*** 将Json字符串转为JsonObject对象* 取值不存在时,返回null…...

linux 主机通信 ipv6 配置

1.检查系统内核是否支持IPv6协议&#xff1a; 在Linux控制台中运行下列命令&#xff1a; cat /proc/sys/net/ipv6/conf/all/disable_ipv6如果返回结果是0&#xff0c;就表明系统支持IPv6协议&#xff1b;若是1&#xff0c;则表明系统目前不支持IPv6协议&#xff1b; 2.禁用I…...

【JavaEE】初识计算机网络(TCP/IP五层模型及封装和分用)

一、 网络通信基础 网络互连的目的是进行网络通信&#xff0c;也即是网络数据传输&#xff0c;更具体一点&#xff0c;是网络主机中的不同进程间&#xff0c;基于网络传输数据。 那么&#xff0c;在组建的网络中&#xff0c;如何判断到底是从哪台主机&#xff0c;将数据传输到…...

在nodejs中实现实时通信的几种方式

在nodejs中实现实时通信的几种方式 在当今世界中&#xff0c;实时通信至关重要。无论是聊天应用程序还是实时体育更新&#xff0c;实时通信都是保持用户活跃度所必需的。Node.js 因其速度、可扩展性和可靠性而成为开发实时应用程序的流行工具。在本文中&#xff0c;我们将探讨…...

【tg】 7 GroupInstanceCustomImpl

group GroupInstanceCustomImpl 核心GroupInstanceCustomInternal G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.h 最核心是是GroupInstanceCustomInternal: private:std::shared_ptr<Threads> _threads;std::u…...

kubernates 集群实战-安装K3s集群

安装K3s集群 安装K3s集群环境准备安装 docker主节点安装work 节点验证环境 安装K3s集群 K3S是一种轻量级的Kubernetes发行版&#xff0c;安装和运行只需要一个二进制文件。相比之下&#xff0c;K8S需要更多的步骤和资源来安装和部署&#xff0c;例如设置etcd集群、安装控制平面…...

通俗介绍:什么是 Redis ?

刚接触 Redis 的伙伴们可能会因为不熟悉而感到困惑。本文简述 Redis 是什么、有哪些作用的问题&#xff0c;是一篇短浅而入门级别的文章。 Redis官网&#xff1a;Redis 打开 Redis 官网可以看到&#xff0c;官方对 Redis 的介绍是这样的&#xff1a;The open source, in-memo…...

蓝桥算法赛(摆玩具)

问题描述 小蓝是一个热爱收集玩具的小伙子&#xff0c;他拥有 n 个不同的玩具。 这天&#xff0c;他把 n 个玩具按照高度顺序从矮到高摆放在了窗台上&#xff0c;然后&#xff0c;他希望将这些玩具分成 k 个段&#xff0c;使得所有分段的极差之和尽可能小。 具体来说&…...

vueDay04——v-if else show

一、v-if的使用 我们可以像c语言一样去使用v-if结构 比如单用v-if&#xff0c;连用v-if v-else&#xff0c;或者是v-if v-else-if v-else 注意&#xff1a; 1.v-if v-else-if需要绑定值,而v-else不需要绑定值 2.if结构可以用在不同的标签类型之间 <div v-if"fir…...

大数据技术学习笔记(二)—— Hadoop 运行环境的搭建

目录 1 准备模版虚拟机hadoop1001.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压…...

leetcode系列(双语)002——GO两数相加

文章目录 两数相加 | Add Two Numbers示例个人解答官方解答扩展Algorithm 两数相加 | Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a sing…...

废柴勇士(据说没有人能坚持37秒)

欢迎来到程序小院 废柴勇士 玩法&#xff1a;点击屏幕下方左右按键击杀怪物&#xff0c;怪物会在左右方向同时来袭&#xff0c;快速点击按钮进行击杀怪物&#xff0c;看您能够坚持多少秒&#xff0c; 据说还没有能够坚持37秒&#xff0c;快去击杀怪物挑战吧^^。开始游戏https:…...

buuctf_练[羊城杯2020]easyphp

[羊城杯2020]easyphp 文章目录 [羊城杯2020]easyphp掌握知识解题思路关键paylaod 掌握知识 ​ .htaccess文件的利用&#xff0c;把自己指定当做 php文件处理&#xff1b;preg_match正则匹配的了解&#xff0c;stristr函数的绕过&#xff1b;file_put_contents文件写入操作的了…...

【Linux】安装配置虚拟机及虚拟机操作系统的安装

目录 一、操作系统 1. 介绍 2. 功能 3. 有哪些 4. 个人版本和服务器版本的区别 二、VMWare虚拟机 1. 安装 2. 配置 三、安装配置Windows Server 1. 配置 2. 安装 四、虚拟机的环境配置及连接 1. 主机连接虚拟机 2. 虚拟机环境配置及共享 3. 环境配置 一、操作系…...

hugo-stack for github

静态博客框架jekyll、hexo和hugo三者之间的区别与差异 博客生成器? 全名为静态网站生成器&#xff0c; 可在任意拥有主机功能的环境下寄存(托管)可直接配合域名进行全球访问 劣势: 每次更新网页必须重新生成整个网站编译速度&#xff08;单位&#xff1a;秒&#xff09; Jek…...

告别手改脚本!用CANoe Panel面板做个变量控制台,测试效率翻倍

告别手改脚本&#xff01;用CANoe Panel面板打造智能变量控制台 在车载网络测试领域&#xff0c;效率提升往往隐藏在那些被忽视的日常操作细节中。当测试工程师频繁打开CAPL脚本修改超时阈值、调整诊断ID或切换测试模式时&#xff0c;不仅打断了工作流&#xff0c;更在团队协作…...

DaVinci Developer与Configurator Pro联调指南:如何高效设计SWC并集成到ECU工程

DaVinci Developer与Configurator Pro联调实战&#xff1a;从SWC设计到ECU集成的全流程解析 在汽车电子控制单元&#xff08;ECU&#xff09;开发领域&#xff0c;工具链的协同效率直接决定了项目进度和质量。作为Vector公司AUTOSAR工具链的核心组件&#xff0c;DaVinci Develo…...

中文长文本语音崩溃?ElevenLabs API超时/截断/静音突变?20年语音架构师紧急发布的6行容错重试+分段重对齐代码(已验证10万+字符稳定输出)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;中文长文本语音崩溃的根因诊断与现象复现 中文长文本语音合成&#xff08;TTS&#xff09;在处理超长段落&#xff08;如 >3000 字&#xff09;时频繁出现进程中断、内存溢出或静音输出&#xff0c;…...

如何3分钟快速上手企业级后台管理系统:终极配置秘籍

如何3分钟快速上手企业级后台管理系统&#xff1a;终极配置秘籍 【免费下载链接】ant-design-vue3-admin 一个基于 Vite2 Vue3 Typescript tsx Ant Design Vue 的后台管理系统模板&#xff0c;支持响应式布局&#xff0c;在 PC、平板和手机上均可使用 项目地址: https://…...

火灾动力学模拟实战:如何用FDS构建精准的火灾预测系统

火灾动力学模拟实战&#xff1a;如何用FDS构建精准的火灾预测系统 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 你是否曾面临这样的困境&#xff1a;当设计一栋大型商业建筑时&#xff0c;如何科学评估火灾时的人员疏…...

智能游戏助手:League Akari如何彻底改变你的英雄联盟体验

智能游戏助手&#xff1a;League Akari如何彻底改变你的英雄联盟体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄选择阶段手…...

2026产品经理学数据分析对升职的价值

一、数据分析能力对产品经理升职的重要性数据分析能力已成为产品经理的核心竞争力之一。掌握数据分析技能可以帮助产品经理更精准地决策&#xff0c;提升产品成功率&#xff0c;从而在职业发展中占据优势。二、数据分析在产品经理工作中的具体应用通过数据分析优化产品功能迭代…...

神经网络建筑负荷预测与供暖优化【附程序】

✨ 长期致力于BP神经网络、负荷预测、空气源热泵、优化控制研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于BP神经网络的公共建筑热负荷预测模型&…...

RML2016.10a数据集读取避坑指南:用Python pickle解决‘latin-1’编码报错

RML2016.10a数据集读取避坑指南&#xff1a;用Python pickle解决‘latin-1’编码报错 当你第一次拿到RML2016.10a数据集&#xff0c;满心欢喜准备开始实验时&#xff0c;一个简单的.pkl文件读取操作却可能让你陷入编码错误的泥潭。UnicodeDecodeError: utf-8 codec cant decode…...

如何用免费开源通信调试工具Wu.CommTool提升工业自动化效率

如何用免费开源通信调试工具Wu.CommTool提升工业自动化效率 【免费下载链接】Wu.CommTool 基于C#、WPF、Prism、MaterialDesign、HandyControl开发的通讯调试工具。支持Modbus Rtu调试、Mqtt调试、TCP调试、串口调试、UDP调试 项目地址: https://gitcode.com/gh_mirrors/wu/W…...