首页 > 其他分享 >表现良好的最长时间段(LeetCode)

表现良好的最长时间段(LeetCode)

时间:2024-08-15 20:53:31浏览次数:15  
标签:map max sum length 最长 hours prefix 时间段 LeetCode

题目

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

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

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

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

解题

"""
时间复杂度: O(n),因为我们只遍历一次数组。
空间复杂度: O(n),用于存储前缀和及其对应的索引。
"""


def longestWPI(hours):
    prefix_sum = 0
    prefix_map = {}
    max_length = 0

    for i, h in enumerate(hours):
        # 如果 h > 8,prefix_sum +1; 否则 -1
        prefix_sum += 1 if h > 8 else -1

        if prefix_sum > 0:
            # 如果前缀和大于0,说明从开始到i的子数组都满足条件
            max_length = i + 1
        else:
            # 检查是否存在 prefix_sum - 1,如果存在则说明有符合条件的子数组
            if prefix_sum - 1 in prefix_map:
                max_length = max(max_length, i - prefix_map[prefix_sum - 1])
            # 如果 prefix_sum 不在哈希表中,记录下它第一次出现的索引
            if prefix_sum not in prefix_map:
                prefix_map[prefix_sum] = i

    return max_length


# 示例 1
hours = [9, 9, 6, 0, 6, 6, 9]
print(longestWPI(hours))  # 输出: 3

标签:map,max,sum,length,最长,hours,prefix,时间段,LeetCode
From: https://blog.csdn.net/weixin_74254879/article/details/141231585

相关文章

  • Python实现最长回文字符串
    题目最长回文字符串是一种对称的字符串,如s="ababd",其中"aba"或"bab"都是回文字符串。求解思路最开始的思路是用类似括号匹配的放手,利用栈来做“对对消”,来判断一个字符串是不是回文字符串,但实际操作中发现“对称轴”元素是不确定的,前面的消除会导致后面的无法对比。然后......
  • 【动态规划】最长不下降子序列
    ​题目描述有长度为N的序列:A1A2…..An求最长不下降子序列:Ai1,Ai2,,,,,Aik,其中ai1<=ai2<=.....<=aik求最长不下降子序列的长度输入从文件 seq.in 中读入数据。第一行,n; 第二行,n个数。输出输出到文件 seq.out 中。最长不下降子序列的长度样例输入 复制11......
  • 3_无重复字符的最长子串
    3_无重复字符的最长子串【问题描述】给定一个字符串s,请你找出其中不含有重复字符最长子串的长度。示例:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。【算法设计思想】此题为典型的滑动窗口问题,这类问题的主要是处理数组或者字......
  • LeetCode530 二叉搜索树的最小绝对差
    前言题目:530.二叉搜索树的最小绝对差文档:代码随想录——二叉搜索树的最小绝对差编程语言:C++解题状态:成功解决!思路注意题目中的二叉搜索树,这个条件暗示每个节点的左子节点肯定小于该节点,右子节点肯定大于该节点。因此,使用中序遍历可以获得一个递增的有序数组,最......
  • LeetCode501 二叉搜索树中的众数
    前言题目:501.二叉搜索树中的众数文档:代码随想录——二叉搜索树中的众数编程语言:C++解题状态:不会…思路利用二叉搜索树性质的同时再加上双指针法。代码/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*lef......
  • 【Leetcode 594 】 最长和谐子序列 —— 这是假的滑动窗口吧!
    和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。示......
  • LeetCode每日一题----特殊数组二
    解析:1.int[]nums:一个整数数组。2.int[][]queries:一个二维整数数组,每个一维数组包含两个整数,表示查询的范围。该方法的主要功能是根据给定的nums数组和一系列查询queries,判断每个查询区间[queries[i][0],queries[i][1]]内的元素是否都具有相同的奇偶性。返回一个布......
  • 【LeetCode:3148】矩阵中的最大得分(Java)
    题目链接3148.矩阵中的最大得分题目描述给你一个由正整数组成、大小为mxn的矩阵grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为c1的单元格移动到值为c2的单元格的得分为c2-c1。你可以从任一单元格开始......
  • 0基础leetcode练习(移动零)
    一、题目介绍这是移动零的网址,大家可以看完博客的思路去练习一下。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]......
  • LeetCode40.组合总和II
    LeetCode40.组合总和II力扣题目链接(opensnewwindow)给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。......