力扣1248.统计优美子数组

力扣1248.统计优美子数组

  • 同930.

哈希表法

  • 求前缀和

cpp 复制代码
  class Solution {
  public:
      int numberOfSubarrays(vector<int>& nums, int k) {
          int n = nums.size();
          unordered_map<int,int> cnt;
          int res=0,sum=0;
          for(int i=0,j=0;i<n;i++)
          {
              cnt[sum] ++;
              if(nums[i] & 1) sum ++;
              res += cnt[sum - k];
          }
          return res;
      }
  };

多指针法

  • 用两个左指针卡左边可取的区间范围

cpp 复制代码
  class Solution {
  public:
      int numberOfSubarrays(vector<int>& nums, int k) {
          int n = nums.size();
          int res=0,s1=0,s2=0;
          for(int i=0,j1=0,j2=0;i<n;i++)
          {
              int x = (nums[i] & 1);
              s1 += x;
              s2 += x;
              //s1 --> s1 < k
              while(j1 <= i && s1 >= k) s1 -= (nums[j1++] & 1);
              //s2 --> s2 == k
              while(j2 <= i && s2 > k) s2 -= (nums[j2++] & 1);
              //此时j1的位置比j2靠右
              res += j1 - j2;
          }
          return res;
      }
  };
相关推荐
只与明月听1 小时前
前端学算法-二叉树(一)
前端·javascript·算法
电院工程师2 小时前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
小刘同学++2 小时前
用 OpenSSL 库实现 3DES(三重DES)加密
c++·算法·ssl
写写闲篇儿3 小时前
搜索二维矩阵
线性代数·算法·矩阵
LunaGeeking4 小时前
重要的城市(图论 最短路)
c++·算法·编程·图论·最短路·floyd
刘小小_算法工程师4 小时前
「ECG信号处理——(17)基于小波熵阈值的R峰检测(与时域-频域-多尺度小波法对比)」2025年6月12日
算法·信号处理
电控极客4 小时前
电动汽车驱动模式扭矩控制设计方法
经验分享·算法·汽车·策略模式
lyh13444 小时前
在macOS上运行Linux容器的方法
数据结构·状态模式
jz_ddk4 小时前
[python] 使用python设计滤波器
开发语言·python·学习·算法
1白天的黑夜15 小时前
二叉树-226.翻转链表-力扣(LeetCode)
数据结构·c++·leetcode