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

网站建设与推广的实训报告wordpress import

网站建设与推广的实训报告,wordpress import,注册安全工程师,台州城乡建设局网站上一篇:算法随笔_49: 有效的括号-CSDN博客 题目描述如下: 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xf…

上一篇:算法随笔_49: 有效的括号-CSDN博客

=====

题目描述如下:

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

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

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

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

示例 1:

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

示例 2:

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

=====

算法思路:

根据题目描述,我们发现,判断“劳累的天数”是严格大于“不劳累的天数”,可以转化为一个求和问题。我们把大于8的元素置为1,小于等于8的元素置为-1,那么某个区间的元素和大于等于1时,就表示了“劳累的天数”严格大于“不劳累的天数”。

那么题目的要求返回表现良好时间段的最大长度,就变为了求元素和大于0的最长区间

对于计算区间元素和,有一个常用的方法: 前缀和

我们设数组nums,pre_sum。

pre_sum[i]表示nums的[0, i]区间的元素和。

pre_sum[j]表示nums的[0, j]区间的元素和。

i < j,因此[i+1, j]区间的元素和就是这两个前缀和的差,即,pre_sum[j] - pre_sum[i]。

介绍了计算区间元素和的方法,我们再来看一下如何寻找最长的区间。

我们先考虑以某个索引 j 为某个区间的右端点,那么如何求出这个区间的最左端点 i 呢?显然最左端点应该出现在从左往右数的第一个使pre_sum[j] - pre_sum[i]>0的索引处。但大于0的值有很多,我们选取哪个值来计算pre_sum[i]呢?我们选择1即可。假如pre_sum[j]=-5,我们选第一次出现的pre_sum[i]=-6,因为如果选择pre_sum[i]=-7,-8等。会导致索引i更靠近右侧,肯定不是最左端点。因此我们找到第一个前缀和为pre_sum[j]-1处的索引即可。

我们枚举所有索引,并找到它们各自的最长区间,最后取它们的最大值即为最终答案。

基本的算法如下:

1. 我们设res为最大区间长度,初始值为0。从左往右枚举数组hours,同时计算当前索引的前缀和pre_sum。如果hours[i]>8,pre_sum加1,否则减1。

2. 把第一次出现的pre_sum存入字典sum2ind中,值为索引i,即,sum2ind[pre_sum]=i。

3.  判断pre_sum-1是否存在于sum2ind,如果存在,用当前索引i减去sum2ind[pre_sum -1]。这就是以当前索引 i 为右端点的最长区间长度seg_len。同时更新res=max(res, seg_len) 。

对于pre_sum大于0的情况,代码实现时有两点需要注意:

1.  我们把前缀和为0的索引设置在-1处,即sum2ind[0]=-1。以方便后面的计算。

2.  当前缀和大于0时,我们统一把pre_sum置为1。这并不影响最终的结果,因为当前缀和大于0时,它的最左端点就是sum2ind[0]=-1处。我们把它置为1,也是为了方便计算前面算法提到的步骤3。当所有pre_sum > 0 时,pre_sum -1都能定位到sum2ind[0]=-1处。

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

class Solution(object):def longestWPI(self, hours):""":type hours: List[int]:rtype: int"""sum2ind = {0: -1}pre_sum = 0res = 0for i, hour in enumerate(hours):pre_sum += 1 if hour > 8 else -1k = 1 if pre_sum > 0 else pre_sumif k - 1 in sum2ind:res = max(res, i - sum2ind[k - 1])if k not in sum2ind:sum2ind[k] = ireturn res

关键词: 前缀和

http://www.dtcms.com/wzjs/553468.html

相关文章:

  • 美食 网站模板开发者app
  • 万网主机网站建设视频高端建筑企业简介
  • 两个网站如何做端口映射wordpress自定义排序
  • 专业营销型网站建设费用自已能做网站建设吗
  • 老版建设银行网站门户网站规划
  • 虚拟主机 两个网站怎么自己网站搜不到
  • 网站设计确认书哈尔滨网站制作公司价格
  • ai设计logo免费网站一百互联网站建设
  • 网站建设与管理教程视频摄影 网站 源码
  • 分析网易严选网站开发松江品划做网站
  • 企业网站个人可以备案吗店铺设计图片素材
  • 沈阳网站哪家做的好网络服务停用
  • 成都网站建设及推广年费wordpress移动端加底部导航
  • 工业和信息化部网站备案系统查询h5游戏网站建设
  • notepad做网站技巧yandex引擎搜索入口
  • 全球做网站的公司排名湖南网站建设开发公司
  • 宁夏省住房城乡建设厅网站wordpress调用列表页
  • 做奢侈品回收网站特点泉企业网站建设
  • 网站空间地址网站建立策划书
  • 网站建设招标文件google广告在wordpress
  • 电龙网站建设东莞横沥邮编
  • 有没有专门做艺术的网站邢台建站企业邮箱
  • 辛集做网站公司公司网站定制
  • 宁波建设网站多少钱怎么建设淘宝那样的网站
  • 用logo做ppt模板下载网站旅行社门店做网站嘛
  • 做一个公司的门户网站多少钱网站开发报价文件
  • 网站后台管理系统的主要功能怎样用网站做淘宝客推广
  • 做护肤的网站有哪些临沂建设企业网站
  • 高端网站源码网站开发需呀那些技术
  • 企业网站个人备案专业的个人网站建设