給你乙個整數陣列 nums 和乙個整數 k。
如果某個 連續 子陣列中恰好有 k 個奇數數字,我們就認為這個子陣列是「優美子陣列」。
請返回這個陣列中「優美子陣列」的數目。
示例 1:
輸入:nums =[1
,1,2
,1,1
], k =
3輸出:2
解釋:包含 3 個奇數的子陣列是 [1,
1,2,
1] 和 [1,
2,1,
1] 。
這是一道排列計算問題,統計兩兩奇數區間含有的偶數個數。
當奇數個數滿足時,它可以拓展的個數為左側奇數含有偶數個數*右側奇數含有偶數個數。
class
solution
:def
numberofsubarrays
(self, nums: list[
int]
, k:
int)
->
int:
#count_odd 字典型,鍵為累加的奇數的個數,值為當前奇數左邊含有偶數的個數
#count_odd_right 字典型,鍵為累加奇數的個數,值為奇數右端含有偶數的個數
count_odd =
even =
0 odd =
0 lasteven =
0for item in nums:
if item %2==
0:even +=
1else
: odd +=
1 count_odd[odd]
= even - lasteven
lasteven = even
count_odd_right =
even =
0 lasteven =
0for i in
range
(len
(nums)-1
,-1,
-1):
if nums[i]%2
==0: even +=
1else
: count_odd_right[odd]
= even - lasteven
lasteven = even
odd -=
1 res =
0for i in
sorted
(count_odd.keys())
: left = count_odd[i]+1
right = count_odd_right.get(i+k-1,
-1)+
1 res += left*right
return res
Leetcode 1248 統計 優美子陣列
給你乙個整數陣列 nums 和乙個整數 k。如果某個 連續 子陣列中恰好有 k 個奇數數字,我們就認為這個子陣列是 優美子陣列 請返回這個陣列中 優美子陣列 的數目。示例 1 輸入 nums 1,1,2,1,1 k 3 輸出 2 解釋 包含 3 個奇數的子陣列是 1,1,2,1 和 1,2,1,1 ...
leetcode1248 統計優美子陣列
給你乙個整數陣列 nums 和乙個整數 k。如果某個 連續 子陣列中恰好有 k 個奇數數字,我們就認為這個子陣列是 優美子陣列 請返回這個陣列中 優美子陣列 的數目。示例 1 輸入 nums 1,1,2,1,1 k 3 輸出 2 解釋 包含 3 個奇數的子陣列是 1,1,2,1 和 1,2,1,1 ...
LeetCode 1248 統計 優美子陣列
給你乙個整數陣列 nums 和乙個整數 k。如果某個 連續 子陣列中恰好有 k 個奇數數字,我們就認為這個子陣列是 優美子陣列 請返回這個陣列中 優美子陣列 的數目。示例 1 輸入 nums 1,1,2,1,1 k 3 輸出 2 解釋 包含 3 個奇數的子陣列是 1,1,2,1 和 1,2,1,1 ...