LeetCode01 - 01.哈希表应用

哈希表在Python中可以使用字典和集合表示。

接下面我们以最热力扣100题为例子,使用哈希表来解决。

一、两数之和

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

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

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

示例代码如下:

复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = {}
        for i, value in enumerate(nums):
            if target - value in hashtable:
                return [i, hashtable[target - value]]
            else:
                hashtable[value] = i

二、字母异位分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例代码演示如下:

复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        hashtable = {}
        for word in strs:
            sorted_word = ''.join(sorted(word))  # sorted_word是当前排序好的字符串
            if sorted_word in hashtable:
                hashtable[sorted_word].append(word)
            else:
                hashtable[sorted_word] = [word]  # 注意是添加为列表;为不是字符串
        return list(hashtable.values())

三、最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n)的算法解决此问题。

示例代码如下:

复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        # 如果一个数字num是连续序列的队首,则num-1不在序列中
        # 如果一个数字num是连续序列的队尾,则num+1不在序列中
        set_nums = set(nums)  # 去重
        res = 0  # 最长的序列长度
        seq_len = 0  # 当前的序列长度
        for num in set_nums:
            if (num-1) not in set_nums:   # 假设当前num是队首
                seq_len = 1
                while (num+1) in set_nums:
                    seq_len += 1
                    num += 1
                res = max(res, seq_len)  # 每次循环结束后更新最长序列的长度

        return res

其中第三题分析当前序列长度和最长序列长度,最后通过max更新每次后的最长序列,避免讨论当列表为空的情况,较为巧妙,有借鉴的地方。

相关推荐
nice_lcj5202 分钟前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
高洁014 分钟前
数据同化与动态状态估计:让孪生持续贴合现实
人工智能·python·深度学习·transformer·迁移学习
feasibility.5 分钟前
一物降一物?AI逆向没有终局:REA拆App,BLA设套,LASIK清场
人工智能·爬虫·github·逆向·skill·rea
通信仿真爱好者30 分钟前
第【139】期--基于深度学习的OFDM信道估计方法研究--python完整代码
python·深度学习·ofdm·信道估计
꧁细听勿语情꧂31 分钟前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
威哥爱编程34 分钟前
模拟面试智能体开发实战 07:答完一题就点评一题,结构化输出给分建议,让每道题都变成复盘
python·agent·harmonyos
cpolar技术支持39 分钟前
中文文件名排序跟拼音对不上:os.listdir 返回的是文件系统顺序,三个中文名按字节排结果正好相反
python·文件系统·cpolar·编码·排序
Thanks_ks43 分钟前
【第 008 讲】在终端中运行 Python 程序:交互模式与脚本模式 | 绝对路径与相对路径 | 以模块方式运行 | 常见报错的识别与排查
python·异常处理·终端·脚本·命令行·cmd·python 解释器
IT古董1 小时前
AI 资讯日报 | 2026年10月25日:Kimi K3.1 Pro开源逼近前沿,OpenAI改离线训练,Claude合并Cowork,神经网络黑箱获新解,具身智能竞技场落幕
人工智能·神经网络·开源
威哥爱编程1 小时前
模拟面试智能体开发实战 08:总评报告先过三道闸,防泄题防夸大防错建议,才敢发到候选人手上
python·agent·harmonyos