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

菏泽北京网站建设电子商务网站功能设计

菏泽北京网站建设,电子商务网站功能设计,建设银行签证预约网站,打开网站自动跳转代码上一篇:算法随笔_50: 表现良好的最长时间段-CSDN博客 题目描述如下: 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间段…

上一篇:算法随笔_50: 表现良好的最长时间段-CSDN博客

=====

题目描述如下:

给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。

我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。

所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。

请你返回「表现良好时间段」的最大长度。

示例 1:

输入:hours = [9,9,6,0,6,6,9]
输出:3
解释:最长的表现良好时间段是 [9,9,6]。

示例 2:

输入:hours = [6,6,6]
输出:0

=====

在上一篇里我们介绍了解决这道算法题的一个方法:前缀和。这一篇我们介绍另外一种方法: 单调栈。

其实这个方法我们可以从上一篇的算法引申而来。上一篇我们是固定右端点,寻找其最左端点。这一篇,我们固定左端点,寻找其最右端点。

我们再来回顾一下上一篇的字典sum2ind,sum2ind[pre_sum]=i,表示前缀和pre_sum第一次出现在索引 i 处。

我们尝试固定sum2ind[pre_sum]为左端点,找到它所对应的最右端点。那么sum2ind[pre_sum]所起始的一个最长区间就找到了。我们枚举所有的sum2ind[pre_sum],找出它们各自的最右端点。最后取它们长度的最大值即为最终答案。下面我们看看如何找到它们的最右端点。

很显然,sum2ind[pre_sum]的最右端点必然出现在从右往左枚举数组碰到的第一个大于pre_sum的所在索引处。

sum2ind所有的pre_sum键都是小于等于0的。且必然是先出现-1,然后-2,-3等等,以此类推。因此我们只需要维护一个单调栈来存储这些第一次出现的小于0的前缀和所在的索引。我们从左往右遍历原数组。对于出现的大于栈顶的元素的前缀和都可以抛弃。单调栈里的元素,因为存储的是索引,因此,往栈顶方向维持一个递增的趋势。但索引对应的前缀和是一个递减的趋势。

一次遍历后,stck里面的元素就是我们需要探寻的所有左端点。我们从右往左枚举原数组hours,找到以stck栈顶元素为左端点的最右端点比如索引 i 。然后弹出栈顶元素,继续从i 处往左遍历。

这里可能需要解释一下,继续从i 处往左遍历的话对于新的栈顶元素不会遗漏最优解吗?为什么无需从数组末端重新枚举?

比如我们找到了stck[-1]的最右端点在索引 i 处。那么索引 i 的右侧所有索引的pre_sum都小于等于stck[-1]的pre_sum,又因为stck[-1]的pre_sum比stck[-2]的pre_sum小,所以stck[-2]的最右端点不可能在索引 i 的右侧。

最后在代码实现的时候,我们把pre_sum设为一个数组,数组的长度为原数组的长度加1,pre_sum的起始元素我们设为0,从pre_sum[1]处开始对应hours[0],以此类推。

算法的时间复杂度为O(n)。下面是代码实现:

class Solution(object):def longestWPI(self, hours):""":type hours: List[int]:rtype: int"""hours_len=len(hours)pre_sum = [0]*(hours_len+1)stck=[0]for i in range(hours_len):pre_sum[i+1]= pre_sum[i] + (1 if hours[i] > 8 else -1)if pre_sum[i+1] < pre_sum[stck[-1]]:stck.append(i+1)res=0for i in range(hours_len, 0, -1):while stck and pre_sum[i] > pre_sum[stck[-1]]:res=max(res, i-stck.pop())return res

关键词: 单调栈


文章转载自:

http://rY5BgAs8.drgmr.cn
http://f7Xq7uME.drgmr.cn
http://FBXoXqxz.drgmr.cn
http://gzKprDt6.drgmr.cn
http://JFBGMToz.drgmr.cn
http://6gLjRaHC.drgmr.cn
http://d2ekS5ON.drgmr.cn
http://ajlh08Dt.drgmr.cn
http://xSboDzQA.drgmr.cn
http://B0G8oNUf.drgmr.cn
http://DlVRWujl.drgmr.cn
http://fTu9ASQj.drgmr.cn
http://kT2SnLIQ.drgmr.cn
http://5myyrYEv.drgmr.cn
http://sZSQOhVT.drgmr.cn
http://AJXkHDHL.drgmr.cn
http://FSViJocY.drgmr.cn
http://JxZv3yPo.drgmr.cn
http://IraU1DWW.drgmr.cn
http://9ysERkHR.drgmr.cn
http://CKF8HyQF.drgmr.cn
http://kUHvtWLh.drgmr.cn
http://KckOyhkK.drgmr.cn
http://c1bSOCFq.drgmr.cn
http://TttDBAkD.drgmr.cn
http://X1t62bGI.drgmr.cn
http://Vg5vdsYc.drgmr.cn
http://f9loWVP1.drgmr.cn
http://SvvMBP4o.drgmr.cn
http://7LuK9AG9.drgmr.cn
http://www.dtcms.com/wzjs/680615.html

相关文章:

  • vue做网站的实例中山医疗网站建设
  • 免费空间赞郑州网站制作专业乐云seo
  • 佛山市网站建设分站企业网页设计制作网站教程
  • 中国建设监理协会网站投稿百度对wordpress
  • 做游戏网站多钱湖北标书设计制作
  • 中国建设银行官网站企业年金做详情页比较好的网站
  • wordpress访问网站很慢做一个论坛网站要多少钱
  • 创建qq网站网站开发工程师任职资格
  • 网站开发英文翻译zencart 网站入侵
  • 购物网站开发的基本介绍开发公司空置房物业费会计科目
  • 专业的定制型网站建设更改网站伪静态
  • 建筑做地图分析的网站国外订房网站怎么和做
  • 做平面设计必知的网站网站设计有哪些公司
  • 做的网站要花钱吗广东新闻联播2011
  • 做网站维护工作难吗整站排名服务
  • 网站可以做的活动推广域名空间做网站
  • 网站如何做实名验证企业网站建设方案渠道
  • 阿里云做网站需要些什么上海营销网站建设
  • 搜索网站建设推广优化做行业分析的网站
  • 网站改版思路北京海淀的保险公司
  • 前端手机网站wordpress 函数教程
  • 网站域名证书软路由做网站
  • 做p2p网站的公司织梦dedecms网站简略标题shorttitle的使用方法
  • 长白山网站学做管理平台wordpress主题 评论
  • 中国旅游网站排名高清图片素材网站免费下载
  • 网站的请求服务做优先级网站中图片加水印
  • 一般网站字体大小高端模版网站
  • 网站通知发送邮件推广策略的概念
  • 东莞公司企业设计网站建设黄冈网站建设效果
  • 网站品牌建设方案佛山网站建设企业