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

工信部 网站备案查询今日实时热点新闻事件

工信部 网站备案查询,今日实时热点新闻事件,asp做网站基本过程,商城网站建站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/88717.html

相关文章:

  • 怎么做新闻网站河北seo基础入门教程
  • 北京建设教育协会官方网站外贸网站建设设计方案
  • 网站集约化 建设方案平台推广引流
  • 网站专题优化如何创建自己的卡网
  • 找个人做网站开不出发票怎么办网店怎么开
  • 竞拍网站做烂了百度收录提交申请
  • 织梦上网站次导航怎么做百度网盘在线观看资源
  • 学校网站作用站长网站推广
  • 长春网站建设制作服装营销方式和手段
  • 导航网站搭建网址注册
  • 厦门建设网站首页今日国内新闻最新消息
  • 弄淘宝招牌图什么网站可以做网站百度不收录
  • 永春政府网站建设情况深圳正规seo
  • 为什么做手机网站晚上偷偷看b站软件推荐
  • 微商城是真的吗网站按天扣费优化推广
  • 做游戏网站需要哪些许可竞价 推广
  • 专做美食的网站chinaz站长素材
  • 怎样做千年私服网站网站关键词排名怎么提升
  • 怎么找需要做网站的客户域名收录查询工具
  • 营销论坛网站建设百度指数名词解释
  • 做网站赚钱难网游推广员
  • 招聘网站咋做链接交易网
  • 江西网站制作临沂seo代理商
  • 深圳网站建设 cms深圳seo推广培训
  • 大学生一个人做网站长沙seo关键词排名
  • ui交互设计用什么软件seo推广沧州公司电话
  • 北京网站设计精选刻百度推广销售
  • 化妆品公司的网站建设的利益分析新闻稿发布平台
  • 怎么在服务器建立网站武汉网络推广外包公司
  • 建行网址seo学校