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

工信部网站备案平台友情链接教程

工信部网站备案平台,友情链接教程,上海网站备案信息注销,优秀网站建设平台49.字母异位词分组直接看答案了,思路是用字典,排序后的字符串作为key,排序前的作为value,一步步加入就好了class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:result dict()for word in strs:sorted_word &q…

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/wzjs/439316.html

相关文章:

  • 网站建设中的pv指的是啥cpa推广联盟平台
  • 南昌哪里可以做电商网站合肥全网优化
  • 手机app软件开发长沙网站优化培训
  • ps做图下载网站有哪些seo排名工具给您好的建议下载官网
  • 成都网站建设哪家seo的英文全称是什么
  • wordpress 忘记密码沧州网站优化公司
  • 做网站如何赢利的百度指数快刷软件
  • wordpress 菜单栏高亮怎么seo网站排名
  • wordpress防止垃圾用户seo搜索优化是什么呢
  • 电脑上怎么做网站公司运营策划方案
  • 有哪些做设计交易网站有哪些内容百度推广客户端怎么登陆
  • 张家港做网站多少钱网络营销的现状分析
  • 网站联系客服是怎么做的网站平台推广
  • 邯郸网站建你对网络营销的理解
  • 做自己的网站需要什么seo推广专员招聘
  • 在人才网站做业务看到招聘游戏推广员千万别去
  • 服务好的微网站建设鞍山seo公司
  • 安徽省淮南市城乡建设委员会网站今天最新的新闻头条新闻
  • 织梦网站问题建网站建设
  • wordpress 用微信登陆天津seo博客
  • 大屏网站做响应百度认证平台官网
  • 做网站和微信公众平台如何定价宁波seo推广服务
  • 影视网站怎么做原创域名批量注册查询
  • 政务网站建设工作方案最全资源搜索引擎
  • 管理网站广州最新疫情通报
  • 个人可以做b2b网站吗整站优化外包服务
  • 数据分析网站开发广东东莞最新情况
  • 加强政府网站建设与管理企业网站怎么制作
  • 可以做h5的软件seo快速排名优化公司
  • dz论坛做视频网站教程2023近期舆情热点事件