LeetCode //C - 1248. Count Number of Nice Subarrays

1248. Count Number of Nice Subarrays

Given an array of integers nums and an integer k. A continuous subarray is called nice if there are k odd numbers on it.

Return the number of nice sub-arrays.

Example 1:

Input: nums = 1,1,2,1,1, k = 3

Output: 2

Explanation: The only sub-arrays with 3 odd numbers are 1,1,2,1 and 1,2,1,1.

Example 2:

Input: nums = 2,4,6, k = 1

Output: 0

Explanation: There are no odd numbers in the array.

Example 3:

Input: nums = 2,2,2,1,2,2,1,2,2,2, k = 2

Output: 16

Constraints:
  • 1 <= nums.length <= 50000
  • 1 <= numsi <= 10^5
  • 1 <= k <= nums.length

From: LeetCode

Link: 1248. Count Number of Nice Subarrays


Solution:

Ideas:

count subarrays with exactly k odds = subarrays with at most k odds − subarrays with at most k-1 odds.

Code:
c 复制代码
int atMostKOdds(int* nums, int numsSize, int k) {
    if (k < 0) return 0;

    int left = 0;
    int countOdd = 0;
    int ans = 0;

    for (int right = 0; right < numsSize; right++) {
        if (nums[right] % 2 == 1) {
            countOdd++;
        }

        while (countOdd > k) {
            if (nums[left] % 2 == 1) {
                countOdd--;
            }
            left++;
        }

        ans += right - left + 1;
    }

    return ans;
}

int numberOfSubarrays(int* nums, int numsSize, int k) {
    return atMostKOdds(nums, numsSize, k) - atMostKOdds(nums, numsSize, k - 1);
}
相关推荐
企业数字化笔记17 分钟前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!1 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君6583 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧3 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
水饺编程4 小时前
第2章:Linux 基础,切换用户
linux·c语言·汇编
hold?fish:palm4 小时前
40 二叉树的直径
c++·leetcode
Shimeri4 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J5 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang5 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
知识分享小能手5 小时前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节