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

dede门户网站模板/厨师培训学校

dede门户网站模板,厨师培训学校,大亨网站开发,怎么做代购彩票网站一、【子串】76.最小覆盖子串 1. 解题思路 定义两个哈希表分别用于 t 统计字符串 t 的字符个数,另一个sub_s用于统计字符串 t 在 s 的子串里面字符出现的频率。 为了降低时间复杂度,定义一个变量t_count用于统计 t 哈希表中元素的个数。哈希表sub_s是一…

一、【子串】76.最小覆盖子串

1. 解题思路

        定义两个哈希表分别用于 t 统计字符串 t 的字符个数,另一个sub_s用于统计字符串 t 在 s 的子串里面字符出现的频率。

        为了降低时间复杂度,定义一个变量t_count用于统计 t 哈希表中元素的个数。哈希表sub_s是一边遍历字符串s一边构建的,所以定义一个变量have用于统计有几个元素满足了t哈希表的条件。当且仅当t_count == have,则表明子串sub_s是涵盖t中所有字符。

        暴力枚举所有s的子串,然后在满足条件的子串中选出长度最小的返回即可,但是这种方法时间复杂度为O(n^2),我们可以选择时间复杂度更优的滑动窗口来解决(时间复杂度O(n))。

        (1)从s开始进行遍历,如果该字符在t中存在,那么更新sub_s和have后,若没有满足条件t_count == have,那么则移动滑动窗口的右边界;如果该字符在t中不存在,那么窗口右边界直接继续向右移动。

        (2)直到满足条件t_count == have,则记录当前窗口的长度length和起点start,然后将窗口的左边界向右移动后,更新sub_s和have。

        (3)如果sub_s和have不满足t_count == have,则重复步骤(1)。

        (4)如果再次遇到满足条件的子串,则判断其长度是否小于length,如果是则更新length和start。

2. 代码实现

class Solution:def minWindow(self, s:str, t:str)->str:ans_left = -1ans_right = len(s)cnt_s = Counter()cnt_t = Counter(t)left = 0for right, c in enumerate(s):cnt_s[c] += 1while cnt_s >= cnt_t:if right-left < ans_right-ans_left:ans_left, ans_right = left, right cnt_s[s[left]] -= 1left += 1return "" if ans_left < 0 else s[ans_left:ans_right+1]

二、【普通数组】53.最大子数组和

1. 解题思路

        本题采用动态规划五部曲进行解答。

        (1)定义dp数组:dp[i]表示的是以nums[i]结尾的最大连续子序列的和。

        (2)递推公式:可以发现,连续子序列的和dp[i]分为两种状态可以得到,一是dp[i-1]+nums[i],也就是延续前面的子序列;另一种是nums[i],也就是从该元素开始的子序列。因此,得到递推公式:dp = max(dp[i-1]+nums[i], nums[i] )

        (3)初始化:dp[0]必须初始化为数组的头元素,即dp[0] = nums[0],其余的元素可以初始化任意值,因为随着状态转移其真正的值会覆盖初始值。

        (4)遍历顺序:正常的遍历顺序即可。

        (5)打印:注意最后输出的不是dp[i],因为最大子数组和不一定是最后一个元素结尾的。

2. 代码实现

class Solution:def maxSubArray(self, nums: List[int])->int:dp = [0] * len(nums)dp[0] = nums[0]for i in range(1, len(nums)):dp[i] = max(dp[i-1]+nums[i], nums[i])return max(dp)

三、【普通数组】56.合并区间

1. 解题思路

        本题采用贪心算法

        (1)为了方便对区间进行合并,需要对区间按照左边界或者右边界进行排序

        (2)判断区间是否发生重叠:当前区间的左边界是否小于等于上一个区间的右边界,如果是则说明这两个区间发生了重叠,那么需要合并区间;如果不是则说明没有发生重叠,那么定义一个新数组存放将当前区间。

        (3)注意:在合并区间的过程中,是更新区间的右边界,但最新的右边界并不一定是当前区间的右边界,因为可能存在上一个区间右边界大于当前区间右边界的情况,所以在进行合并的时候,更新右边界应该是取当前区间右边界和上一个区间右边界的最大值

2. 代码实现

class Solution:def merge(self, intervals:List[List[int]])->List[List[int]]:# 定义一个变量result用于存放结果集result = []# 判断给出的intervals是否为空if len(intervals) == 0:return result# 按照左边界对区间进行排序intervals.sort(key = lambda x: x[0])# 将第一个区间加入到结果集中,再进行更新即可result.append(intervals[0])# 遍历区间,从1开始是因为为了防止i-1异常for i in range(1, len(intervals)):# 判断区间是否重叠if result[-1][1]>=intervals[i][0]:result[-1][1] = max(result[-1][1], intervals[i][1])else:result.append(intervals[i])return result

http://www.whsansanxincailiao.cn/news/31940958.html

相关文章:

  • 东莞模板建站哪家好/sem竞价课程
  • 婚恋网站模板下载/外贸商城建站
  • 网站投放广告怎么做/wordpress建站公司
  • 网站怎么做按钮/手机百度网盘网页版登录入口
  • 网站制作 杭州公司/优化课程
  • 西安做网站公司必达/网络营销公司排行榜
  • web网站开发里怎么切换界面/神马搜索seo优化排名
  • 昆明网站建设外包/东莞网络优化调查公司
  • 网站源码上传到空间以后怎么做/交换链接的其它叫法是
  • 做网站浏览器/网站优化seo怎么做
  • 山东嘉邦家居用品公司网站 加盟做经销商多少钱 有人做过吗/互联网营销培训平台
  • 网站群管理平台建设/合肥seo整站优化网站
  • 品牌网站建设流程图/重庆seo多少钱
  • 光谷网站建设公司/我是站长网
  • 网站集约化建设的总体情况/网站建设及推广优化
  • 网站排名不可有利就前/百度招商加盟推广
  • 群英云服务器/江阴网站优化公司
  • 网站是怎么做/肇庆seo按天收费
  • 怎么做亚马逊网站/产品推广图片
  • 外贸网站支付系统/网络优化排名培训
  • 建设网站的公司济南兴田德润o简介图片/优化什么意思
  • 建程网的工程可靠吗/南宁seo排名外包
  • 成都 做网站 模版/中国最新军事新闻最新消息
  • wordpress建设网站的方法/不受国内限制的浏览器下载
  • wordpress添加flash/郑州谷歌优化外包
  • 网站底部设计/店铺运营
  • 门户网站推广/上海全网营销推广
  • 公司网站开发方案/宁波seo关键词排名优化
  • 深圳好的网站建设公司哪家好/身边的网络营销案例
  • 专业的平面设计网站有哪些/数字营销