0
点赞
收藏
分享

微信扫一扫

LeetCode-1248. Count Number of Nice Subarrays

开源分享 2022-08-10 阅读 55


Given an array of integers ​​nums​​​ and an integer ​​k​​. A 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 is 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 <= nums[i] <= 10^5​
  • ​1 <= k <= nums.length​

​题解:​

​存储每个奇数出现的位置,然后计算每k个奇数的左右非奇数个数,相乘即可。​

class Solution {
public:
int numberOfSubarrays(vector<int>& nums, int k) {
int n = nums.size();
int res = 0;
vector<int> odd;
for (int i = 0; i < n; i++) {
if (nums[i] & 1 == 1) {
odd.push_back(i);
}
}
if (odd.size() == 0 || k > odd.size()) {
return 0;
}
for (int i = 0; i < odd.size() - k + 1; i++) {
int left = 0, right = 0;
if (i == 0) {
left = odd[i] + 1;
}
else {
left = odd[i] - odd[i - 1];
}
if (i + k < odd.size()) {
right = odd[i + k] - odd[i + k - 1];
}
else {
right = n - odd[i + k - 1];
}
res += left * right;
}
return res;
}
};

 

举报

相关推荐

0 条评论