【leetcode扣热题100(1)】适用于入门、Python代码及详细分析(持续更新)
先说前面,我的水平很差如果代码没有特殊标记,则使用力扣官方问题,这里基本记录了我做题时的所有疑惑和解决方案,以及一些补充知识点,希望能方便像我这样的初学者。 目录。 1.两数之和。 2. 异位词分组的字母。 3.最长连续序列。 逻辑点: 。 逻辑点: 。 相反,这个问题并不难。#xff00c;核心在于如何跳过不必要的遍历,例如,如果已知有x,x+1,x+2,⋯,x+y 连续序列,但我们又重新开始了 x+1,x+2 或者是 x+y 开始尝试匹配#xff0c;那么结果肯定不会比枚举好 x 答案的起点。我用的方法是指针,官方问题如下:: ,便于快速搜索。不用担心这个哈希表的哈希函数的细节,反正你可以把它理解为一个可以快速检查的表。1.两数之和。
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hashtable = dict() for i, num in enumerate(nums): if target - num in hashtable: return [hashtable[target - num], i] hashtable[nums[i]] = i return []。
def twoSum(self, nums: List[int], target: int) -> List[int]:。
定义了 。Solution。
类中的一种方法 。twoSum。
,它接受一个整数列表 。nums。
和一个目标值 。target。
,并返回包含两个整数索引的列表。hashtable = dict()。
创建空的哈希表(字典),用于存储值及其对应的索引。for i, num in enumerate(nums):。
使用 。enumerate。
函数遍历 。nums。
列表,同时获取元素的索引 。i。
和元素值 。num。
。enumerate(a)。
数组a将被接受c;生成一个包含索引和值的迭代器,返回当前元素的索引和元素值。
这里的hashtable指的是哈希表中索引的部分,而不是哈希表中数据的部分。因为我们正在寻找合格的数字,所以这里的哈希函数是y=x,如果下表为x的数组项不是空的,那就是找到。if target - num in hashtable:。
2. 异位词分组的字母。
class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: mp = collections.defaultdict(list) for st in strs: key = "".join(sorted(st)) mp[key].append(st) return list(mp.values())。
Solution。
在类中定义一个名字 。groupAnagrams。
的方法。它接受字符串列表 。strs。
作为输入并返回字符串列表的列表。mp。
,每个键映射到一个列表中。这将用于字母异位字符串的分组。st。
排序中的字符,并将它们重新组合成字符串key。st。
添加到 defaultdict 。mp。
对应排序字符串 。key。
在列表中c;也完成了分组。mp。
值(即字母异位词列表)将其转换为列表并返回。# defaultdictfrom使用defalt collections import defaultdictmp = defaultdict(int) # 每个值初始化为intmp类型['];a'] += 1print(mp) # 输出: defaultdict(<class 'int'>, { 'a': 1}#使用普通dictmp = { }if 'a' not in mp: mp['a'] = 0mp['a'] += 1print(mp) # 输出: { 'a': 1}。
为什么不能写? key = "".join(sorted(st))。
这是因为key = sorted(st) 排序后只会返回字符列表,而不是字符串。我们使用"".join() 将排序后的字符列表连接成字符串,这可以作为哈希表的索引使用。key = sorted(st)。
3.。连续序列最长。
# 我写的是用指针从第二个开始找到连续序列,然后向后移动,记录长度,直到发现第一个不连续,记录当前最大序列长度。然后指针继续从刚才的位置向后移动,以找到一个新的连续序列。整个过程只需要遍历一次class Solution: def longestConsecutive(self, nums: List[int]) -> int: if not nums: return 0 nums.sort() longest_streak = 1 current_streak = 1 i = 0 while i < len(nums) - 1: if nums[i] == nums[i + 1]: i += 1 continue elif nums[i] + 1 == nums[i + 1]: current_streak += 1 else: longest_streak = max(longest_streak, current_streak) current_streak = 1 i += 1 longest_streak = max(longest_streak, current_streak) return longest_streak。
class Solution: def longestConsecutive(self, nums: List[int]) -> int: longest_streak = 0 num_set = set(nums) for num in num_set: if num - 1 not in num_set: current_num = num current_streak = 1 while current_num + 1 in num_set: current_num += 1 current_streak += 1 longest_streak = max(longest_streak, current_streak) return longest_streak。
输入列表 。
nums。 转换为集合(哈希表) 。
num_set。
官方问题解决的多余序列跳过部分是使用遍历每个数字,检查哈希表中是否有num-1。如果存在,说明这个数字是前面统计的连续序列的一部分,然后你可以跳过这个数字。 。
-
上一篇
-
下一篇
- 最近发表
-
- 点击游戏游戏什么值得玩? 高人气点击游戏游戏排行榜
- Melexis推出了带LIN界面的Triphibian压力传感器芯片,大大简化了设计,降低了成本
- docker Error response from daemon: Get “https://registry
- LeetCode环境教程(包括常见错误)Vscode配置
- 安徽:率先在全国省级完成 DeepSeek
- 技嘉RTX 4060 Ti 16G显卡京东以3729元的价格享受第二代游戏体验
- 《科学》杂志公布 2024 年度十大科学突破,中国发现的最古老的多细胞真核生物入选
- 罗永浩要回到手机行业吗?从AIOS开始
- 最新研究揭示了伊朗黄土沉积发育记录的气候和环境进化记录
- Metacritic公布了2024年游戏发行商排名:世嘉冠军
- 随机阅读
-
- 随意走非铺装路面 理想i8开启全国实地路测:为7月份上市做最后准备
- 软件培训游戏有什么好玩的? 最热门的软件培训游戏排名前十
- 培育新终端!北京发文支持“5G” “人形机器人” 工厂或成为第一落地场景
- 周弘毅回应说,女粉丝太少了:我不依赖外表水平
- Acer的金属质感 UM310 USB闪存盘:256GB大容量,USB 3.0快速传输,99元高效出行伙伴
- Midjourney中的垫图、角色和风格有什么区别?
- IPASON战神主机14代i7
- 中国无人机产业的可持续发展,相关部门将与行业合作,加强产业
- 狗游戏有哪些? 下载量高的狗游戏排行榜
- 中国无人机产业的可持续发展,相关部门将与行业合作,加强产业
- 哪些软件培训游戏值得玩? 流行的软件培训游戏精选
- Caviar 第一个迪拜展厅开幕,展示超级 1.4 万美元定制 iPhone
- 架空游戏大全 2024年架空游戏排名
- 什么是软件训练游戏? 十大必玩软件培训游戏选择
- 第十三届蓝桥杯软件决赛C/C 大学 B 组
- 当代罗宾汉!枪杀美国医保巨头CEO嫌疑人出庭围观:再次成为时尚大片
- 反乌托邦游戏哪些好玩? 十大耐玩反乌托邦游戏精选
- 【超详细】从 0 到 1 打包你的 uni
- 哪个游戏最好玩? 最热的困难游戏排名前十名
- AI玩具,2025年第一个“风口”来了?
- 搜索
-
- 友情链接
-