文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 单调栈
    • 2.2 哈希

1. 题目

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

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

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

请你返回「表现良好时间段」的最大长度(好剥削啊,一定要劳累才行)。

示例 1:
输入:hours = [9,9,6,0,6,6,9]
输出:3
解释:最长的表现良好时间段是 [9,9,6]。提示:
1 <= hours.length <= 10000
0 <= hours[i] <= 16

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-well-performing-interval
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 类似题目:LeetCode 962. 最大宽度坡(单调栈)

2.1 单调栈

class Solution {public:int longestWPI(vector<int>& hours) {int n = hours.size(), i = 0;vector<int> sum(n+1, 0);for(i = 1; i <= n; i++){sum[i] = (hours[i-1]>8 ? 1 : -1) + sum[i - 1];//记录前缀和,第一个是0}stack<int> s;int maxlen = 0;for(i = 0; i < n+1; i++){if(s.empty() || sum[s.top()] > sum[i])//单调递减栈s.push(i);}for(i = n; i >= 0 && !s.empty(); i--){while(!s.empty() && sum[i] > sum[s.top()]){maxlen = max(maxlen, i-s.top());s.pop();}}return maxlen;}
};

52 ms 21.6 MB

2.2 哈希

class Solution {public:int longestWPI(vector<int>& hours) {int n = hours.size(), maxlen = 0, sum=0;unordered_map<int, int> m;for(int i = 0; i < n; ++i){sum += hours[i]>8 ? 1 : -1;if(sum > 0)//和大于0,全部满足条件maxlen = i+1;else{if(m.count(sum-1))//第一次出现的前一种状态(sum-1)存在吗maxlen = max(maxlen, i-m[sum-1]);if(!m.count(sum))//存下第一次出现的当前状态m[sum] = i;}}return maxlen;}
};

68 ms 21.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1124. 表现良好的最长时间段(单调栈/哈希)相关推荐

  1. Longest Well-Performing Interval 表现良好的最长时间段

    文章目录 Longest Well-Performing Interval 表现良好的最长时间段 思路 tag Longest Well-Performing Interval 表现良好的最长时间段 ...

  2. leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)

    题目 https://leetcode.com/problems/maximal-rectangle/ 题解 本题与 leetcode 84. Largest Rectangle in Histogr ...

  3. leetcode.84 leetcode739. 每日温度(都是单调栈)

    学习不息,转载不止. 后面有自己写的题解.别忘了. 单调栈学习建议以及练习(15:54 开始):「力扣」第 42.739.496.316.901.402.581 题. 这是一个非常典型的利用单调栈来解 ...

  4. 表现良好的最长时间段

    问题描述 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数. 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」. 所谓「表现良好的时间段」,意味在 ...

  5. LeetCode 907. 子数组的最小值之和(单调栈)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组. 由于答案可能很大,因此返回答案模 10^9 + 7. 示 ...

  6. LeetCode 1063. 有效子数组的数目(单调栈)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个整数数组 A,返回满足下面条件的 非空.连续 子数组的数目: 子数组中,最左侧的元素不大于其他元素. 示例 1: 输入:[1,4,2,5,3] 输 ...

  7. c语言力扣l最大矩形,leetcode 84柱状图中最大的矩形,利用单调栈求解l

    利用单调了栈求解leetcode 84柱状图中最大的矩形 image image 利用单调递增栈的方式来实现,计算发生在每次弹出栈顶的操作过程中 单调递增栈的操作步骤 1.如果栈为空或者栈顶元素比入栈 ...

  8. LeetCode 456. 132模式(逆序遍历+单调栈)

    1. 题目 给定一个整数序列:a1, a2, -, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj. 设计一 ...

  9. leetcode 1504. Count Submatrices With All Ones | 1504. 统计全 1 子矩形(单调栈)

    题目 https://leetcode.com/problems/count-submatrices-with-all-ones/ 题解 本题与 leetcode 84. Largest Rectan ...

最新文章

  1. 构造函数没有返回值是怎么赋值的?
  2. String.format 的大用场
  3. vsphere ha 虚拟机监控错误_学会这3招,分分钟迁移业务繁忙虚拟机!
  4. C#3.0语言规范new [Unified C# 3.0 Specification Now Available]
  5. WebSocket服务器TransactionID_SiteDetailMap的析构工作
  6. Shell脚本中函数的定义和调用笔记
  7. 【Eclipse 插件】Subclipse
  8. php mysql rpm包_MYSQL RPM包安装
  9. 圆满收官!我的2022 秋招总结与建议
  10. java与模式观察者模式_谈谈java中的观察者模式
  11. python 求解二次规划(quadprog)
  12. 《数据库原理MySQL》第三次上机实验
  13. 正常图片转灰色图片——灰度图
  14. word怎么设置边距为80磅_word 字体磅数 word怎么设置字体磅数
  15. 阿里云云盘扩容数据盘_Linux
  16. 华为WeAutomate RPA产品首席规划师周为:企业数智化转型之路,RPA共创新价值
  17. 设置页面左右结构(其中一端自适应)
  18. windows11如何去桌面快捷键小箭头的方法
  19. Web安全工具—WireShark使用(持续更新)
  20. 第一批90后30岁了,该有多少存款?

热门文章

  1. MySQL中外键的定义、作用、添加和删除
  2. java final修饰属性_Java final关键字用来修饰类、方法、属性
  3. 血红蛋白判断access程序答案_普渡大学开发智能手机应用程序 帮助评估贫血症情况...
  4. GetProcAddress()用法
  5. LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)
  6. 从源码到可执行程序的步骤
  7. java console 到文件
  8. Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法
  9. 任务并行VS数据并行
  10. 整理一篇Linux drm显示系统的文章