力扣1124.表现良好的最长时间段

力扣1124.表现良好的最长时间段

  • 哈希表存最小的下标

    • 当s[i] > 0 那么他到头可以构成一个合法时间段
    • 否则 找到之前的 s[i] - 1 的下标:
      • 因为连续的前缀和一定只相差1
      • 若想算更小的s[i] - 2,s[i] - 3...
      • 一定会先算到s[i] - 1
      • 那么这些更小数 必然在 s[i]−1 首次出现的位置的右边
cpp 复制代码
  class Solution {
  public:
      int longestWPI(vector<int>& hours) {
          int n = hours.size();
          vector<int> s(n+1);
          for(int i=0;i<n;i++)
          {
              s[i+1] = s[i];
              s[i+1] += hours[i] > 8 ? 1 : -1;
              cout<<s[i+1]<<endl;
          }
          
          unordered_map<int,int> cnt;
          int res=0;
          for(int i=0;i<=n;i++)
          {
              if(s[i] > 0) res = max(res,i);
              if(cnt.find(s[i] - 1) != cnt.end())
                  res = max(res,i - cnt[s[i] - 1]);
              if(cnt.find(s[i]) == cnt.end())
                  cnt[s[i]] = i;
          }
          return res;
      }
  };
相关推荐
LYFlied3 分钟前
【每日算法】LeetCode215. 数组中的第K个最大元素
前端·算法
2501_941822753 分钟前
从限流降载到全链路流控的互联网工程语法实践与多语言探索
leetcode·模拟退火算法
炽烈小老头4 分钟前
【每天学习一点算法 2026/01/06】最小栈
学习·算法·leetcode
mit6.82410 分钟前
hadoop|贪心
算法
2501_9418053116 分钟前
在阿姆斯特丹智能港口场景中构建集装箱实时调度与高并发物流数据分析平台的工程设计实践经验分享
java·大数据·算法
涂山小楼21 分钟前
线程join()方法的深度理解
java·前端·算法
六毛的毛23 分钟前
填充每个节点的下一个右侧节点指针
leetcode
gihigo199829 分钟前
LDPC码硬判决译码算法的详细解析
网络·算法
Clarence Liu29 分钟前
快慢指针问题
后端·算法
Swift社区32 分钟前
LeetCode 467 环绕字符串中唯一的子字符串
算法·leetcode·职场和发展