【LeetCode】1248. 統計「優美子陣列」
阿新 • • 發佈:2021-07-17
1248. 統計「優美子陣列」
知識點:陣列;字首和;
題目描述
給你一個整數陣列nums 和一個整數 k。
如果某個 連續 子陣列中恰好有 k 個奇數數字,我們就認為這個子陣列是「優美子陣列」。
請返回這個陣列中「優美子陣列」的數目
示例
輸入:nums = [1,1,2,1,1], k = 3 輸出:2 解釋:包含 3 個奇數的子陣列是 [1,1,2,1] 和 [1,2,1,1] 。 輸入:nums = [2,4,6], k = 1 輸出:0 解釋:數列中不包含任何奇數,所以不存在優美子陣列。 輸入:nums = [2,2,2,1,2,2,1,2,2,2], k = 2 輸出:16
解法一:字首和
又是連續子序列,想字首和,和560題:和為k的子陣列有區別嗎?其實是一模一樣的。前者是子陣列和為k,現在是子陣列奇數個數為k,換湯不換藥;直接字首和+雜湊表。
class Solution { public int numberOfSubarrays(int[] nums, int k) { Map<Integer,Integer> map = new HashMap<>(); map.put(0,1); int count = 0; int presum = 0; for(int i = 0; i < nums.length; i++){ presum += nums[i] % 2; //統計奇數個數字首和; if(map.containsKey(presum-k)) count += map.get(presum-k); map.put(presum, map.getOrDefault(presum, 0)+1); } return count; } }
時間複雜度:O(N);
體會
連續子陣列,想字首和。