## Problem https://leetcode.com/problems/count-complete-subarrays-in-an-array/ <br> :::spoiler **Optimal Space & Time Complexity** ``` - Time complexity: O(n) - Space complexity: O(n) ``` ::: <br> <hr/> ## Solutions :::spoiler 東 ```javascript= ``` ::: <br> :::spoiler Hao ```javascript= var countCompleteSubarrays = function(nums) { let left = 0; let right = 0; const distinctNums = new Set(nums); const distinctNumsCounter = new Map(); let completeSubNumsCount = 0; while (right < nums.length) { distinctNumsCounter.set(nums[right], (distinctNumsCounter.get(nums[right]) || 0) + 1); while (distinctNumsCounter.size === distinctNums.size) { distinctNumsCounter.set(nums[left], distinctNumsCounter.get(nums[left]) - 1); distinctNumsCounter.get(nums[left]) === 0 && distinctNumsCounter.delete(nums[left]); left += 1; completeSubNumsCount += nums.length - right; } right += 1; } return completeSubNumsCount; }; ``` ::: <br> :::spoiler YC ```javascript= ``` ::: <br> :::spoiler SOL ```javascript= ``` ::: --- ## Supplement / Discussion ### 東 ### Hao https://leetcode.com/problems/count-complete-subarrays-in-an-array/solutions/3839312/100-sliding-window-video-counting-complete-subarrays-good-approach/ 1. Use `new Set()` to get distinct elements 2. `map.delete(key)` is more readable than `delete obj[key]` 3. `completeSubNumsCount += nums.length - right;` make the algorithm could iterate `n` to include the possible solutions. ### YC ### SOL