【leetcode刷题之路】面试经典150题(3)——哈希表+区间

文章目录

      • 5 哈希表
        • 5.1 【哈希表】赎金信
        • 5.2 【数学】同构字符串
        • 5.3 【数学】单词规律
        • 5.4 【哈希表】有效的字母异位词
        • 5.5 【哈希表】字母异位词分组
        • 5.6 【双指针】两数之和
        • 5.7 【数学】快乐数
        • 5.8 【哈希表】219. 存在重复元素 II
        • 5.9 【数学】最长连续序列
      • 6 区间
        • 6.1 【数学】汇总区间
        • 6.2 【区间】合并区间
        • 6.3 【区间】插入区间
        • 6.4 【区间】用最少数量的箭引爆气球

5 哈希表

5.1 【哈希表】赎金信

题目地址:https://leetcode.cn/problems/ransom-note/description/?envType=study-plan-v2&envId=top-interview-150

  分别计算两个字符串中字母的出现次数,然后比较 r a n s o m N o t e ransomNote ransomNote中字母出现次数在 m a g a z i n e magazine magazine中是否一样。

class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:r_dict = {}m_dict = {}# hashtablefor c in ransomNote:if c in r_dict:r_dict[c] += 1else:r_dict[c] = 0for c in magazine:if c in m_dict:m_dict[c] += 1else:m_dict[c] = 0# comparafor c in r_dict:if c not in m_dict or r_dict[c] > m_dict[c]:return Falsereturn True
5.2 【数学】同构字符串

题目地址:https://leetcode.cn/problems/isomorphic-strings/description/?envType=study-plan-v2&envId=top-interview-150

  如果映射是唯一的,那么每对有映射关系的s和t中对应的字母在各自的字符串中,首次出现的小标索引也是一致的,通过这个规则来判断是否为同构字符串。

class Solution:def isIsomorphic(self, s: str, t: str) -> bool:for i in range(len(s)):if s.index(s[i]) != t.index(t[i]):return Falsereturn True
5.3 【数学】单词规律

题目地址:https://leetcode.cn/problems/word-pattern/description/?envType=study-plan-v2&envId=top-interview-150

  同上一题,映射关系为字母与单词一一对应。

class Solution:def wordPattern(self, pattern: str, s: str) -> bool:s_new = s.split(" ")if len(pattern) != len(s_new):return Falsefor i in range(len(pattern)):if pattern.index(pattern[i]) != s_new.index(s_new[i]):return Falsereturn True
5.4 【哈希表】有效的字母异位词

题目地址:https://leetcode.cn/problems/valid-anagram/description/?envType=study-plan-v2&envId=top-interview-150

  分别计算字符串 s s s t t t中字母出现次数,比较是否一致即可。

class Solution:def isAnagram(self, s: str, t: str) -> bool:s_dict = {}t_dict = {}# hashtable_buildfor c in s:if c in s_dict:s_dict[c] += 1else:s_dict[c] = 0for c in t:if c in t_dict:t_dict[c] += 1else:t_dict[c] = 0# judge_stringif len(s_dict) != len(t_dict):return Falsefor c in s_dict:if c not in t_dict or s_dict[c] != t_dict[c]:return Falsereturn True
5.5 【哈希表】字母异位词分组

题目地址:https://leetcode.cn/problems/group-anagrams/description/?envType=study-plan-v2&envId=top-interview-150

  方法一:分别计算每个单词的字母出现次数,将一样的单词分为一组。

  方法二:每组异位词经过词内排序后,都会是同一个单词,根据这个规则构建哈希表。

# 方法一
class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:strs_dict = [{} for _ in range(len(strs))]strs_visited = [0]*len(strs)# hashtable_buildfor i in range(len(strs)):for c in strs[i]:if c in strs_dict[i]:strs_dict[i][c] += 1else:strs_dict[i][c] = 1# divideans = []for i in range(len(strs)):tmp = []if strs_visited[i] == 0:tmp.append(strs[i])strs_visited[i] = 1for j in range(i+1,len(strs)):if strs_dict[j] == strs_dict[i] and strs_visited[j] == 0:tmp.append(strs[j])strs_visited[j] = 1ans.append(tmp)return ans
# 方法二
class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:hash_table = {}for s in strs:tmp = "".join(sorted(s))if tmp in hash_table:hash_table[tmp].append(s)else:hash_table[tmp] = [s]return list(hash_table.values())
5.6 【双指针】两数之和

题目地址:https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-interview-150

  详见代码。

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:tmp = nums.copy()tmp.sort()left,right = 0,len(nums)-1while left<right:if tmp[left]+tmp[right] == target:index_a = nums.index(tmp[left])nums[index_a] = pow(10,9)+1index_b = nums.index(tmp[right])return [index_a,index_b]elif tmp[left]+tmp[right] < target:left += 1else:right -= 1 
5.7 【数学】快乐数

题目地址:https://leetcode.cn/problems/happy-number/?envType=study-plan-v2&envId=top-interview-150

  结果为 1 1 1就是快乐数,出现循环就不是快乐数。

class Solution:def isHappy(self, n: int) -> bool:cir_num = []while True:if n == 1:return Trueif n in cir_num:return Falsecir_num.append(n)str_num = str(n)n = sum(int(c)**2 for c in str_num)
5.8 【哈希表】219. 存在重复元素 II

题目地址:https://leetcode.cn/problems/contains-duplicate-ii/description/?envType=study-plan-v2&envId=top-interview-150

  详见代码。

class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:idx_dict = {}for i in range(len(nums)):if nums[i] in idx_dict:if i-idx_dict[nums[i]] <= k:return Trueidx_dict[nums[i]] = ireturn False
5.9 【数学】最长连续序列

题目地址:https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-interview-150

  排序后逐一比较即可,并更新最长长度。

class Solution:def longestConsecutive(self, nums: List[int]) -> int:if len(nums) == 0:return 0nums = list(set(nums))nums.sort()max_long,tmp_long = 1,1for i in range(1,len(nums)):if nums[i]-nums[i-1] == 1:tmp_long += 1else:max_long = max(max_long,tmp_long)tmp_long = 1return max(max_long,tmp_long)

6 区间

6.1 【数学】汇总区间

题目地址:https://leetcode.cn/problems/summary-ranges/description/?envType=study-plan-v2&envId=top-interview-150

  逐一比较相邻元素差值是否为 1 1 1,把差值为 1 1 1的元素合并到一个区间,剩下的单独一个区间。

class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:ans = []# array_len == 0if len(nums) == 0:return ans# array_len != 0range_l,range_r = nums[0],nums[0]for i in range(1,len(nums)):if nums[i] - nums[i-1] == 1:range_r = nums[i]else:rg = str(range_l) + "->" + str(range_r) if range_l != range_r else str(range_l)ans.append(rg)range_l = range_r = nums[i]rg = str(range_l) + "->" + str(range_r) if range_l != range_r else str(range_l)if rg not in ans:ans.append(rg)return ans
6.2 【区间】合并区间

题目地址:https://leetcode.cn/problems/merge-intervals/description/?envType=study-plan-v2&envId=top-interview-150

  根据区间的第一个元素进行排序,然后依次比较区间的收尾元素进行合并。

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort()l,r = intervals[0][0],intervals[0][1]ans = []for i in range(1,len(intervals)):if intervals[i][0] <= r:r = max(intervals[i][1],r)else:ans.append([l,r])l,r = intervals[i][0],intervals[i][1]if [l,r] not in ans:ans.append([l,r])return ans
6.3 【区间】插入区间

题目地址:https://leetcode.cn/problems/insert-interval/description/?envType=study-plan-v2&envId=top-interview-150

  将新区间插入列表中,然后进行排序再合并。

class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:intervals.append(newInterval)intervals.sort()l,r = intervals[0][0],intervals[0][1]ans = []for i in range(1,len(intervals)):if intervals[i][0] <= r:r = max(intervals[i][1],r)else:ans.append([l,r])l,r = intervals[i][0],intervals[i][1]if [l,r] not in ans:ans.append([l,r])return ans
6.4 【区间】用最少数量的箭引爆气球

题目地址:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/?envType=study-plan-v2&envId=top-interview-150

  按照每个区间的第二个元素进行排序,如果区间有交叉元素,则需要一支箭,循环时记录当前的最末尾位置,如果遍历超过了这个最末尾位置,则需要一支箭。

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:points.sort(key = lambda x:x[1])end = points[0][1]ans = 1for i in range(1,len(points)):if points[i][0] > end:ans += 1end = points[i][1]return ans

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

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

相关文章

Stable Diffusion 模型分享:AstrAnime(Astr动画)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五 下载地址 模型介绍 AstrAnime 是一个动漫模型&#xff0c;画风色彩鲜明&#xff0c;擅长绘制漂亮的小姐姐。 条目内容类型大模型…

fastjson解析自定义get方法导致空指针问题

背景 为了在日志中把出入参打印出来&#xff0c;以便验证链路和排查问题&#xff0c;在日志中将入参用fastjson格式化成字符串输出&#xff0c;结果遇到了NPE。 问题复现 示例代码 public static void main(String[] args) {OrganizationId orgId new OrganizationId();N…

规模化强化学习 — 多任务强化学习

1 简述 1.1 单任务强化学习&#xff08;STRL&#xff09; 在单任务强化学习中&#xff0c;一个无人机的AI系统可能被训练来执行特定的任务&#xff0c;比如自主导航。在这个任务中&#xff0c;无人机需要学习如何有效地从起点飞行到终点&#xff0c;并避开障碍物。 举例&#…

【Java多线程】分析线程加锁导致的死锁问题以及解决方案

目录 1、线程加锁 2、死锁问题的三种经典场景 2.1、一个线程一把锁 2.2、两个线程两把锁 2.3、N个线程M把锁&#xff08;哲学家就餐问题&#xff09; 3、解决死锁问题 1、线程加锁 其中 locker 可以是任意对象&#xff0c;进入 synchronized 修饰的代码块, 相当于加锁&…

Java SourceDataLine 播放音频

Java SourceDataLine 播放音频 1 依赖2 接口3 实现4 测试 项目Value音频格式 添加依赖*.wav(JDK 原生支持)*.pcm(JDK 原生支持)*.au(JDK 原生支持)*.aiff(JDK 原生支持)*.mp3mp3spi.jar*.flacjflac-codec.jar 1 依赖 <dependency><groupId>com.googlecode.soundl…

⭐北邮复试刷题LCR 052. 递增顺序搜索树__DFS (力扣119经典题变种挑战)

LCR 052. 递增顺序搜索树 给你一棵二叉搜索树&#xff0c;请 按中序遍历 将其重新排列为一棵递增顺序搜索树&#xff0c;使树中最左边的节点成为树的根节点&#xff0c;并且每个节点没有左子节点&#xff0c;只有一个右子节点。 示例 1&#xff1a; 输入&#xff1a;root [5,…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

TypeScript01:安装TypeScript

一、TypeScript 官方网站&#xff1a;https://www.tslang.cn/docs/index.html 练习场&#xff1a;https://www.typescriptlang.org/zh/play 好处&#xff1a; 强类型语言&#xff0c;对JS弱类型的一个良好补充&#xff1b;TS利于大型项目团队合作&#xff0c;可以一定程度…

这五个软件测试工具,测试工程师必备

在软件开发过程中&#xff0c;软件测试是确保软件质量和稳定性的关键环节。为了帮助开发人员和测试团队更好地完成这一任务&#xff0c;市面上涌现出众多软件测试工具。本文将盘点五个备受推崇的软件测试工具&#xff0c;它们各具特色&#xff0c;适用于不同的测试场景。 Test…

ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

文章目录 ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整获取音频长度pydub获取音频长度获取时长精确到秒格式设定 mutagen获取音频长度 调整音量视频音量调整注意事项 ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整 老王媳妇说上次那个pip挺好…

深度学习的学习笔记帖子2

人脸数据集的介绍&#xff1a; https://zhuanlan.zhihu.com/p/362356480 https://blog.csdn.net/bjbz_cxy/article/details/122210641 CASIAWebFace人脸数据集等的github&#xff1a; https://github.com/deepinsight/insightface/blob/master/recognition/datasets/README.md…

蓝桥杯基础知识点9 stack、queue、priority_queue

蓝桥杯基础知识点9 stack、queue、priority_queue 01 stack的定义和结构 stack是一种后进先出&#xff08;LIFO&#xff09;的数据结构&#xff0c;头文件<stcak>。 template <class T, class Container deque<T>> class stack; T&#xff1a;存储在stack…

《VitePress 简易速速上手小册》第7章 高级功能与动态内容(2024 最新版)

文章目录 7.1 动态路由与 API 集成7.1.1 基础知识点解析7.1.2 重点案例&#xff1a;技术博客7.1.3 拓展案例 1&#xff1a;电商网站7.1.4 拓展案例 2&#xff1a;事件管理网站 7.2 状态管理与 Vuex 使用7.2.1 基础知识点解析7.2.2 重点案例&#xff1a;用户认证系统7.2.3 拓展案…

力扣精选算法100道——Z字形变换(模拟专题)

目录 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f6a9;先处理第一行和最后一行 &#x1f6a9;再处理中间行 &#x1f388;实现代码 &#x1f388;了解题意 大家看到这个题目的时候肯定是很迷茫的&#xff0c;包括我自己也是搞不清楚题目什么意思&#xff0c;我…

memcpy和strcat的区别

memcpy 函数&#xff1a; memcpy 函数用于在内存之间复制一定数量的字节。memcpy 是按字节进行复制的&#xff0c;可以用于复制任意类型的数据&#xff0c;不仅限于字符串。memcpy 不会自动添加字符串结束符号 \0&#xff0c;因此在复制字符串时&#xff0c;需要确保复制的字节…

喝点小酒-胡诌“编程语言学习”

今天&#xff0c; 与一个小哥们儿&#xff08;学习计算机科学与技术专业的&#xff0c;我儿子&#xff0c;这是真的&#xff09;一块儿吃饭&#xff08;这顿饭&#xff0c;在家里吃的&#xff0c;吹个牛哈&#xff0c;我做的&#xff0c;三个荤菜、一个素材、一个汤、主食米饭 …

约瑟夫经典问题C++,STL容器queue解法

题目&#xff1a; Description n 个人围成一圈&#xff0c;从第一个人开始报数,数到 m 的人出列&#xff0c;再由下一个人重新从 1 开始报数&#xff0c;数到m 的人再出圈&#xff0c;依次类推&#xff0c;直到所有的人都出圈&#xff0c;请输出依次出圈人的编号。 注意&…

[linux]进程间通信(IPC)———共享内存(shm)(什么是共享内存,共享内存的原理图,共享内存的接口,使用演示)

一、什么是共享内存 共享内存区是最快的&#xff08;进程间通信&#xff09;IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。注意&#xff1a;…

Three.js初学(2)

Three.js初学&#xff08;2&#xff09; 三维坐标系的认识1. 辅助坐标系 光源的影响1. 光材质的影响2. 光源介绍点光源环境光平行光 3. 光源衰减/位置 相机控件1. 引入扩展库2. 使用方法 三维坐标系的认识 这一章节的主要作用是加强自我对三维坐标空间的认识。 1. 辅助坐标系…

猫头虎分享已解决Bug || TypeError: Cannot set property ‘innerHTML‘ of null

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …