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

每日算法-哈希表(两数之和、)

一.两数之和

1.1题目描述

1.2题解思路

利用哈希表,先判断hash表中有无target-nums[i]的值,再将nums[i]放入到hash表中

1.3题解代码

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ret;unordered_map<int,int> hash;//nums[i] 数组下标for(int i = 0; i < nums.size(); i++){//判断i之前的数据有无target-nums[i]的值int key = target-nums[i];if(hash.count(key)){//找到了ret.push_back((hash[key]));ret.push_back(i);break;}//将nums[i]放入到hash表中hash[nums[i]] = i;}return ret;}
};

二.判断是否互为字符重排

2.1题目描述

2.2题解思路

定义两个hash表,hash1记录第一个字符串,hash2记录第二个字符串,判断hash1和hash2是否相等即可。

优化:只定义一个hash表,记录第一个字符串时,执行++操作,记录第二个字符串时,执行--操作,最后遍历一遍hash表,看是否为0

2.3题解代码

class Solution {
public:bool CheckPermutation(string s1, string s2) {if(s1.size() != s2.size()) return false;//数组下标char 数组存的数据intint hash[26];for(auto &e : s1){++hash[e-97];}for(auto &e : s2){--hash[e-97];}for(auto &e : hash){if(e != 0) return false;}return true;}
};

三.存在重复元素II

3.1题目描述

3.2题解思路

利用哈希表,先判断hash表中有无nums[i],若有则继续判断其下标之差是否<=k,再将nums[i]放入到hash表中

3.3题解代码

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int,int> hash;//nums[i] i//遍历一遍nums,将nums中的数据放入到hash表中for(int i = 0; i < nums.size(); i++){if( hash.count(nums[i]) ){if(i - hash[nums[i]] <= k)return true;}hash[nums[i]] = i;}return false;}
};

四.字母异位词分组

4.1题目描述

4.2题解思路

定义一个hash表,key值存排序后的string,value存原始的string列表。

遍历strs,将数据存储到hash表中,最后再遍历hash表,value中存储的值就是答案

4.3题解代码

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>> hash;//排序之后的string,原始的string列表for(int i = 0; i < strs.size(); i++){//首先进行排序string tmp = strs[i];sort(strs[i].begin(),strs[i].end());//把数据放入到hash表中hash[strs[i]].push_back(tmp);}vector<vector<string>> ret;for(auto& kv: hash){ret.push_back(kv.second);}return ret;}
};
http://www.xdnf.cn/news/1224.html

相关文章:

  • STM32串口重定向:MDK与GCC重定向需重写的不同函数
  • UE5 鼠标点击一个物体触发Onclick事件
  • 死信队列完整处理方案
  • AiEditor v1.3.8 发布
  • 2023蓝帽杯初赛内存取证-3
  • vmstat指令介绍
  • 自动化测试实现容器化部署
  • C#内存管理深度解析:值类型与引用类型全解析
  • Linux命令-pidstat
  • Python简介与入门
  • 使用若依二次开发商城系统-4:商品属性
  • 无价值的劳动与暴力威胁是否会导致人性逆转?-来自DeepSeek
  • WP快主题
  • 激光SLAM算法综述
  • 滚动的足球-第16届蓝桥第4次STEMA测评Scratch真题第3题
  • Android Studio调试中的坑二
  • C++与C
  • 1.微服务拆分与通信模式
  • NLP高频面试题(五十一)——LSTM详解
  • 【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析
  • MCP Server架构设计详解:一文掌握框架核心
  • PowerBi中REMOVEFILTERS怎么使用?
  • 虚无隧穿产生宇宙(true nothing tunneling) 是谁提出的
  • 【Spring Boot】MyBatis多表查询的操作:注解和XML实现SQL语句
  • 权限管理降维打击:AI自动生成分布式系统鉴权代码(含JWT刷新策略)
  • 如何通过证书认证安全登录堡垒机、防火墙和VPN?安当KSP密钥管理系统助力企业实现零信任身份验证
  • 【中级软件设计师】程序设计语言基础成分
  • 3.1.2 materialDesign:Card 的使用介绍
  • VUE篇之,实现锚点定位,滚动与导航联动
  • 黑盒测试——等价类划分法实验