LeetCode1248 統計 優美子陣列

2021-10-05 06:59:55 字數 1491 閱讀 9423

給你乙個整數陣列 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 ...