代码随想录leetcode200题之哈希表

目录

  • 1 介绍
  • 2 训练
  • 3 参考

1 介绍

本博客用来记录代码随想录leetcode200题中哈希表部分的题目。

2 训练

题目1:242. 有效的字母异位词

C++代码如下,

class Solution {
public:bool isAnagram(string s, string t) {vector<int> cnt1(26, 0), cnt2(26,0);for (char c : s) cnt1[c-'a']++;for (char c : t) cnt2[c-'a']++;for (int i = 0; i < 26; ++i) {if (cnt1[i] != cnt2[i]) return false;}return true;}
};

python3代码如下,

class Solution:def isAnagram(self, s: str, t: str) -> bool:cnt1 = [0] * 26cnt2 = [0] * 26for c in s:cnt1[ord(c)-ord('a')] += 1for c in t:cnt2[ord(c)-ord('a')] += 1for i in range(26):if cnt1[i] != cnt2[i]:return Falsereturn True

题目2:349. 两个数组的交集

C++代码如下,

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_map<int,bool> visited1;for (auto x : nums1) visited1[x] = true;vector<int> res;unordered_map<int,bool> visited2;for (auto x : nums2) {if (visited1[x] == true) {if (visited2[x] == false) {res.emplace_back(x);visited2[x] = true;}} }return res;}
};

python3代码如下,

class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:vis1 = collections.defaultdict(bool)for x in nums1:vis1[x] = True res = []vis2 = collections.defaultdict(bool)for x in nums2:if vis1[x]:if vis2[x] == False:res.append(x)vis2[x] = True return res

题目3:202. 快乐数

C++代码如下,

class Solution {
public:bool isHappy(int n) {set<int> vis;while (n != 1 && vis.count(n) == 0) { //n要么为1,要么无限循环vis.insert(n);int t = 0;while (n > 0) {t += (n % 10) * (n % 10);n /= 10;}n = t; //更新}//cout << "n = " << n << endl;return n == 1;}
};

python3代码如下,

class Solution:def isHappy(self, n: int) -> bool:vis = set()while n != 1 and (n not in vis):vis.add(n)x = 0while n > 0:x += int((n % 10) * (n % 10))n //= 10n = x return n == 1

题目4:1. 两数之和

C++代码如下,

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> map_val_idx; //一边加入一边查询for (int i = 0; i < nums.size(); ++i) {int x = nums[i];int y = target - x;if (map_val_idx.count(y) != 0) {return {i, map_val_idx[y]};} map_val_idx[x] = i;}return {-1,-1};}
};

python3代码如下,

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:map_val_idx = collections.defaultdict(int)for i in range(len(nums)):x = nums[i]y = target - x if y in map_val_idx:return [i, map_val_idx[y]]map_val_idx[x] = i return [-1,-1]

题目5:454. 四数相加 II

C++代码如下,

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {int n = nums1.size();int res = 0;unordered_map<int, int> cnt;for (int i = 0; i < n; ++i) {int a = nums1[i];for (int j = 0; j < n; ++j) {int b = nums2[j];cnt[a+b]++;}}for (int i = 0; i < n; ++i) {int a = nums3[i];for (int j = 0; j < n; ++j) {int b = nums4[j];res += cnt[-a-b];}}return res;}
};

python3代码如下,

class Solution:def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:cnt = collections.defaultdict(int)for a in nums1:for b in nums2:cnt[a+b] += 1res = 0for a in nums3:for b in nums4:res += cnt[-a-b]return res

题目6:383. 赎金信

C++代码如下,

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {vector<int> cnt1(26, 0);vector<int> cnt2(26, 0);for (auto c : ransomNote) cnt1[c-'a']++;for (auto c : magazine) cnt2[c-'a']++;for (int i = 0; i < 26; ++i) {if (cnt1[i] > cnt2[i]) return false;}return true;}
};

python3代码如下,

class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:cnt1 = [0] * 26cnt2 = [0] * 26for c in ransomNote:cnt1[ord(c)-ord('a')] += 1for c in magazine:cnt2[ord(c)-ord('a')] += 1for i in range(26):if cnt1[i] > cnt2[i]:return False return True

题目7:15. 三数之和

以下解法的时间复杂度过高,后续更正

C++代码如下,

//注意nums[i],nums[j],nums[k]去重
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {map<int, int> map_val_cnt;for (auto x : nums) map_val_cnt[x]++;vector<int> vals;for (auto [k, v] : map_val_cnt) vals.emplace_back(k);set<int> vis;for (auto x : vals) vis.insert(x);int n = vals.size();set<vector<int>> ans;for (int i = 0; i < n; ++i) {int a = vals[i];for (int j = 0; j < n; ++j) {int b = vals[j];int c = 0 - a - b;if (vis.count(c) != 0) {unordered_map<int,int> curr_cnt;curr_cnt[a]++;curr_cnt[b]++;curr_cnt[c]++;if (curr_cnt[a] <= map_val_cnt[a] && curr_cnt[b] <= map_val_cnt[b] &&curr_cnt[c] <= map_val_cnt[c]) {vector<int> t = {a, b, c};sort(t.begin(), t.end());ans.insert(t);}}}}vector<vector<int>> res(ans.begin(), ans.end());return res;}
};

python3代码如下,

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:map_val_cnt = collections.defaultdict(int)for x in nums:map_val_cnt[x] += 1vals = []for val in map_val_cnt:vals.append(val)vis = set()for val in vals:vis.add(val)ans = set()n = len(vals)for i in range(n):a = vals[i]for j in range(n):b = vals[j]c = 0 - a - bif c in vis:curr_cnt = collections.defaultdict(int)curr_cnt[a] += 1curr_cnt[b] += 1curr_cnt[c] += 1if curr_cnt[a] <= map_val_cnt[a] and \curr_cnt[b] <= map_val_cnt[b] and \curr_cnt[c] <= map_val_cnt[c]:t = [a, b, c]t.sort()ans.add(tuple(t))ans = list(ans)ans = [list(x) for x in ans]return ans

题目8:18. 四数之和

以下解法的时间复杂度过高,后续更正

C++代码如下,

typedef long long LL;class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {map<int, int> map_val_cnt;for (auto x : nums) map_val_cnt[x] += 1;vector<int> vals;set<int> vis;for (auto [k, v] : map_val_cnt) {vals.emplace_back(k);vis.insert(k);}set<vector<int>> ans;int n = vals.size();for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {for (int k = 0; k < n; ++k) {int a = vals[i];int b = vals[j];int c = vals[k];LL t = (LL)target - a - b - c;if (t > INT_MAX || t < INT_MIN) { //如果t超出了整型范围,那么vis.count(d)一定为0continue;}int d = (LL)target - a - b - c;if (vis.count(d) != 0) { unordered_map<int,int> curr_cnt;curr_cnt[a]++;curr_cnt[b]++;curr_cnt[c]++;curr_cnt[d]++;if (curr_cnt[a] <= map_val_cnt[a] && curr_cnt[b] <= map_val_cnt[b] &&curr_cnt[c] <= map_val_cnt[c] && curr_cnt[d] <= map_val_cnt[d]) {vector<int> t = {a, b, c, d};sort(t.begin(), t.end());ans.insert(t);}}}}}vector<vector<int>> res(ans.begin(), ans.end());return res;}
};

python3代码如下,

class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:map_val_cnt = collections.defaultdict(int)for x in nums:map_val_cnt[x] += 1vals = []vis = set()for x in map_val_cnt:vals.append(x)vis.add(x)ans = set()n = len(vals)for i in range(n):for j in range(n):for k in range(n):a = vals[i]b = vals[j]c = vals[k]d = target - a - b - c if d in vis:curr_cnt = collections.defaultdict(int)curr_cnt[a] += 1curr_cnt[b] += 1curr_cnt[c] += 1curr_cnt[d] += 1if curr_cnt[a] <= map_val_cnt[a] and curr_cnt[b] <= map_val_cnt[b] and \curr_cnt[c] <= map_val_cnt[c] and curr_cnt[d] <= map_val_cnt[d]:t = [a, b, c, d]t.sort()t = tuple(t)ans.add(t)res = list(ans)res = [list(x) for x in res]return res

3 参考

代码随想录官网

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

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

相关文章

洛谷 P3379 [模板] 最近公共祖先(LCA)

【模板】最近公共祖先&#xff08;LCA&#xff09; 题目描述 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N , M , S N,M,S N,M,S&#xff0c;分别表示树的结点个数、询问的个数和树根结点的序号…

第十一节 LLAVA模型lora训练(包含lora权重预加载与源码解读)

文章目录 前言一、语言模型加载1、语言模型加载2、语言模型训练处理a、embeding处理b、语言模型lora训练处理lora参数配置peft配置语言模型lora参数c、语言模型tokenizer加载加载tokenizer设置对话开头语句二、视觉模型加载1、加载图像模型主函数源码解读2、initialize_vision_…

达梦数据库使用-外部表

文章目录 前言一、外部表使用1.外部表定义1.1 数据文件定义方式1.2控制文件定义方式2.外部表定义注意事项二、使用示例1.disql工具的脚本方式1.1 使用数据文件1.2 使用控制文件2.DM管理工具的图形方式2.1 创建目录2.2.创建指向数据文件的外部表2.3.创建指向控制文件的外部表三、…

英语口语情景对话视频软件分享!

在当今全球化的时代&#xff0c;英语已成为一种通用的国际语言。为了提高英语口语能力&#xff0c;越来越多的人选择使用英语口语情景对话视频软件。本文将为您推荐几款备受欢迎的英语口语情景对话视频软件&#xff0c;帮助您轻松提高英语口语水平。 AI外语陪练 AI外语陪练软件…

Leetcode 3130. Find All Possible Stable Binary Arrays II

Leetcode 3130. Find All Possible Stable Binary Arrays II 0. 序言1. 算法思路2. 代码实现 1. 第一版本2. 第二版本3. 第三版本4. 第四版本 3. 算法优化 1. 算法实现一2. 算法实现二 题目链接&#xff1a;3130. Find All Possible Stable Binary Arrays II 0. 序言 这道题…

已经有 Prometheus 了,还需要夜莺?

谈起当下监控&#xff0c;Prometheus 无疑是最火的项目&#xff0c;如果只是监控机器、网络设备&#xff0c;Zabbix 尚可一战&#xff0c;如果既要监控设备又要监控应用程序、Kubernetes 等基础设施&#xff0c;Prometheus 就是最佳选择。甚至有些开源项目&#xff0c;已经内置…

LoRA的原理简介

在文章开始前先澄清一个概念&#xff0c;需要区分形近的单词"LoRa"&#xff08;long range&#xff09;&#xff0c;这是一项通信技术。熟悉物联网行业的朋友相对会比较熟悉LoRa这项技术&#xff0c;因为有些设备比如电梯的控制就使用了这个技术进行本地数据和命令的…

小红书释放被封手机号 无限注册

前几年抖音也可以释放被封手机号 那时候都不重视 导致现在被封手机号想释放 基本不可能的 或者就是最少几百块 有专业的人帮你通过某些信息差释放 本教程是拆解 小红书被封手机号怎么释放&#xff0c;从今年开始&#xff0c;被封的手机号无法注销了 所以很困扰 那么本教程来…

TypeScript中的数据选择艺术:pick和omit操作入门

引言 标题&#xff1a;TypeScript中的数据选择艺术&#xff1a;pick和omit操作入门简短介绍&#xff1a;探索TypeScript中的实用工具类型Pick和Omit&#xff0c;它们可以帮助你从现有类型中选择或排除属性&#xff0c;简化你的代码并提高类型安全性。 背景知识 易于理解的解…

基于一种改进小波阈值的微震信号降噪方法(MATLAB)

微震是指岩体由于在人为扰动或自然原因下受力变形&#xff0c;发生破裂过程中能量积聚而释放的弹性波或应力波。微震信号具有信噪比低、不稳定性、瞬时性和多样性等特点。因此&#xff0c;在任何损坏之前都会出现微小的裂缝&#xff0c;这种微小的裂缝是由岩层中应力和应变的变…

PPT职场课:话术+技巧+框架+案例,告别只会念PPT不会讲(8节课)

课程目录 001-讲PPT如何开场及导入?5个简单实用的方法.mp4 002-讲PPT如何过渡衔接结尾?6类话术争来就用.mp4 003-掌握这3个逻辑表达万能框架&#xff0c;搞定98的PPT.mp4 004-学会这3种PPT结构讲解技巧告别只会念不会讲(上).mp4 005-学会这3种PPT结构讲解技巧告别只会念…

Logstash分析MySQL慢查询日志实践

删除匹配到的行&#xff0c;当前行信息不记录到message中

106网页短信群发平台

什么是106网页短信群发平台&#xff1f; 106网页短信群发平台是一种便捷的在线群发工具&#xff0c;通过该平台用户可以方便地向大量的手机号码*。相比传统的群发方式&#xff0c;106网页群发平台具有更高效、更便捷的特点。 为什么选择106网页短信群发平台&#xff1f; 高效快…

浙大×移动云,携手点亮AI新时代

近年来&#xff0c;中国移动依托强大的算网资源优势&#xff0c;围绕大模型训练、推理和应用三大场景&#xff0c;打造了一站式智算产品体系。该体系旨在为客户提供覆盖资源、平台、应用的AI全链路服务。目前&#xff0c;一站式智算产品体系已在浙江大学智算中心和许昌中原智算…

C++:编程界的王者,引领未来的创新之路

在编程语言的浩瀚星空中&#xff0c;C犹如一颗耀眼的恒星&#xff0c;以其卓越的性能、深厚的底蕴和广泛的应用领域&#xff0c;持续引领着编程界的发展。它不仅在当下拥有无可替代的地位&#xff0c;更在未来展现出无限的潜力和可能性。 一、C&#xff1a;编程界的王者风范 …

事务transaction与其的acid特性

DDL DML CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL COMMENT 创建时间,modifyDate datetime DEFAULT NULL COMMENT 修改时间,userName varchar(30) NOT NULL COMMENT 学生名称,pwd varchar(36) DEFAULT NULL …

若依框架dialog弹窗取消点击空白出关闭

如果想全局取消的话就找到main.js在里面加上下面的一行代码&#xff0c;添加完成之后记得清楚浏览器缓存重新加载js文件。 Element.Dialog.props.closeOnClickModal.default false;如果想指定某个弹窗取消点击空白处关闭&#xff0c;那么就找到那个弹窗加上。添加完毕之后刷新…

【python】基于岭回归算法对学生成绩进行预测

前言 在数据分析和机器学习领域&#xff0c;回归分析是一种预测连续数值的监督学习技术。当数据特征与目标变量之间存在线性关系时&#xff0c;线性回归模型尤其有用。然而&#xff0c;当特征数量多于样本数量&#xff0c;或者特征之间存在多重共线性时&#xff0c;普通最小二…

unaipp推荐算法的汽车租赁系统zaxzu 微信小程序hbuiderx

随着现代汽车租赁管理的快速发展&#xff0c;可以说汽车租赁管理已经逐渐成为现代汽车租赁管理过程中最为重要的部分之一。但是一直以来我国传统的汽车租赁管理并没有建立一套完善的行之有效的汽车租赁管理系统&#xff0c;传统的汽车租赁管理已经无法适应高速发展&#xff0c;…

基于SpringBoot+Vue点餐系统设计和实现(源码+LW+部署讲解)

&#x1f339;作者简介&#xff1a;✌全网粉丝10W&#xff0c;前大厂员工&#xff0c;多篇互联网电商推荐系统专利&#xff0c;现有多家创业公司&#xff0c;致力于建站、运营、SEO、网赚等赛道。也是csdn特邀作者、博客专家、Java领域优质创作者&#xff0c;博客之星、掘金/华…