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

力扣hot100速通(7.9)|49.字母异位词分组 128.最长连续序列 283.移动零 11.盛最多水的容器 42.接雨水

49.字母异位词分组

直接看答案了,思路是用字典,排序后的字符串作为key,排序前的作为value,一步步加入就好了

class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:result = dict()for word in strs:sorted_word = "".join(sorted(word)) #排序字符串之后获得是排序后的列表print(word)if sorted_word in result.keys():result[sorted_word].append(word)else:result[sorted_word]= [word]return list(result.values())

128.最长连续序列

居然说是hash法,让我思考一下,我可以直接暴力求解的,但是得排序,这样复杂度就是O(nlogn)的

class Solution:def longestConsecutive(self, nums: List[int]) -> int:if len(nums)<=1:return len(nums)result = 1tmp=1nums.sort()for i in range(1,len(nums)):if nums[i]==nums[i-1]+1:tmp+=1result = max(tmp,result)elif nums[i]==nums[i-1]:continueelse:tmp=1return result

题目要求我们给出O(n)的方法,需要好好斟酌一下,如何使用hash法降低复杂度,看了解析

这个问题要求时间复杂度为O(n),可以使用哈希表(字典)来实现。

1. 创建一个哈希表:
- 用来存储每个数对应的连续序列的长度。
2. 遍历数组: 
- 对于每个数,如果它已经在哈希表中,直接跳过。
- 如果是新数:
- 检查这个数的左右相邻数是否在哈希表中,取出它们对应的连续序列长度 left 和 right。
- 计算当前数的连续序列长度:cur_length = left + right + 1。
- 更新最大长度 max_length。
- 更新当前数及其连续序列两端点的长度为 cur_length。
3. 返回最大长度:
- 在遍历结束后,即可得到最长的连续序列长度。

class Solution:def longestConsecutive(self, nums: List[int]) -> int:nums_dict = {}max_len =0for i in range(len(nums)):if nums[i] in nums_dict.keys():continueleft = nums_dict.get(nums[i]-1,0)right = nums_dict.get(nums[i]+1,0)cur_len = left+right+1max_len = max(max_len,cur_len)nums_dict[nums[i]] = cur_lennums_dict[nums[i]-left] = cur_lennums_dict[nums[i]+right]= cur_lenreturn max_len

这里注意,只需要修改两端的值,中间的值不会再用的到了,复杂度为O(n)

283.移动零

采用类似快排的划分思想,以非0数为基准,左边为非零数,右边为0,通过zeroindex记录第一个为0的元素的下标。然后循环遍历nums数组,当nums[i]!=0时,nums[i]nums[zeroindex]进行交换,然后zeroindex++ 时间复杂度:O(n),空间复杂度:O(1)

看了下是这样的,我们首先找到第一个为0 的位置,然后这个时候我们应当设置zeroindex为当前位置,i继续遍历,加入nums[i]!=0,那么我们就交换当前值和nums[zeroindex],然后同时让zeroindex+1,这样的话保证0被移动到后面去了,而这个为0的最后会被放到后面去

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""if len(nums)<=1:return numszeroindex=-1for i in range(len(nums)):if nums[i]==0 and zeroindex==-1:zeroindex=iif nums[i]!=0 and zeroindex!=-1:nums[i],nums[zeroindex]=nums[zeroindex],nums[i]zeroindex+=1return nums

11.盛最多水的容器

看到这个题目我第一时间想到的是暴力搜索,理论上遍历所有容器的容量,找到最大值就好,但是我们仔细思考一下,不难发现,假设我们用left和right表示两个容器壁,那么容器的容量计算公式应当是

(right-left)*min(height[left],height[right])

由于知道是双指针解法,因此我初步判断,我们每次动的指针应当是矮的那一根,然后直到,两指针相遇为止,因为我们动高的那一根,无论怎么动,都不会使得容器容积变大了,因此我们就明白了应该如何减少遍历次数

class Solution:def maxArea(self, height: List[int]) -> int:left,right = 0,len(height)-1max_volum=0while left<right:max_volum = max(max_volum,(right-left)*min(height[left],height[right]))if height[left]<=height[right]:left+=1else:right-=1return max_volum

42.接雨水

思考了一下,没想明白如何计算储水量,看下解析,我看到的一个比较好的双指针解法是这样的,我们首先找到最高的柱子的位置,记住这个位置,然后slow从左侧开始遍历,right一开始设置为slow+1,如果说right比slow高了,我们就要更新柱子,并计算这两个之间的储水值

class Solution:def trap(self, height: List[int]) -> int:total = 0left,right=0,len(height)-1maxl,maxr=0,0while left<=right:if height[left]>=maxl:maxl=height[left]if height[right]>=maxr:maxr=height[right]           if height[left]<=height[right]:total+=maxl-height[left]left+=1else:total+=maxr-height[right]right-=1return total

http://www.dtcms.com/a/272919.html

相关文章:

  • 观成科技:基于自监督学习技术的恶意加密流量检测方案
  • CRMEB Pro版前端环境配置指南
  • AT9850B北斗双频导航定位芯片简介
  • 基于大数据的电力系统故障诊断技术研究
  • 华为鸿蒙HarmonyOpenEye项目:开眼App的鸿蒙实现之旅
  • SSRF(ctfshow)
  • 【第三章-基础】Python 字典
  • 3D Surface Reconstruction with Enhanced High-Frequency Details
  • 【成长】-进步论
  • GlobalMapper用DSM转DEM
  • Zotero+zotmoov+坚果云同步
  • mysql索引底层原理
  • 智慧城市网络架构升级与SD-WAN技术应用实践
  • C++11 划分算法原理解析:is_partitioned、partition_copy与partition_point
  • 设备管理系统架构演进:从本地化部署到云端协同的 2025 新趋势
  • [Java实战]Spring Boot 3实战:使用QQ邮箱发送精美HTML邮件(四十三)
  • k8s之Helm详细讲解
  • 壁仞 k8s 兼容
  • 强化学习算法基准测试:6种算法在多智能体环境中的表现实测
  • 【oscp】超长攻击链vulhub靶机,TommyBoy1dot0
  • 开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记
  • 网络安全(初级)(1)
  • 【数据结构与算法】数据结构初阶:动态顺序表各种方法(接口函数)复盘与整理
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘logging’问题
  • 高并发导致重复key问题--org.springframework.dao.DuplicateKeyException
  • 【科研绘图系列】R语言绘制相关系数图
  • easyui碰到想要去除顶部栏按钮边框
  • “SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI指数生态质量评价
  • brpc中的bthread_jump_fcontext汇编函数到底发生了什么?
  • three2.0