Leetcode--1248. 统计「优美子数组」(java)
給你一個整數數組?nums 和一個整數 k。
如果某個 連續 子數組中恰好有 k 個奇數數字,我們就認為這個子數組是「優美子數組」。
請返回這個數組中「優美子數組」的數目。
?
示例 1:
輸入:nums = [1,1,2,1,1], k = 3
輸出:2
解釋:包含 3 個奇數的子數組是 [1,1,2,1] 和 [1,2,1,1] 。
示例 2:
輸入:nums = [2,4,6], k = 1
輸出:0
解釋:數列中不包含任何奇數,所以不存在優美子數組。
示例 3:
輸入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2
輸出:16
?
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10^5
1 <= k <= nums.length
代碼:
class?Solution?{
????public?int?numberOfSubarrays(int[]?nums,?int?k)?{
????????if?(nums?==?null?||?nums.length?==?0?||?nums.length?<?k)?return?0;
????????//?雙指針
????????int?left?=?0,?right?=?0;
????????int?count?=?0;?//?連續子數組中奇數的個數
????????int?res?=?0;
????????int?preEven?=?0;?//?記錄第一個奇數前面的偶數個數
????????while?(right?<?nums.length){
????????????//?連續子數組中奇數個數不夠
????????????if?(count?<?k){
????????????????if?(nums[right]?%?2?!=?0)?count++;
????????????????right++;?//?移動右側指針
????????????}
????????????//?連續子數組中奇數個數夠了,看第一個奇數前面有多少個偶數
????????????if?(count?==?k)?{
????????????????preEven?=?0;
????????????????while?(count?==?k){
????????????????????res++;
????????????????????if?(nums[left]?%?2?!=?0)?count--;
????????????????????left++;
????????????????????preEven++;
????????????????}
????????????}?else?res?+=?preEven;?//?每次遇到?right?為偶數的時候就進行累加?相當于區間前面偶數個數?*?后面偶數個數
????????}
????????return?res;
????}
}
總結
以上是生活随笔為你收集整理的Leetcode--1248. 统计「优美子数组」(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-4 堆栈模拟队列 (25 分)
- 下一篇: PHP 中错误控制符@