Description#
You are given a 0-indexed array nums of length n.
The distinct difference array of nums is an array diff of length n such that diff[i] is equal to the number of distinct elements in the suffix nums[i + 1, …, n - 1] subtracted from the number of distinct elements in the prefix nums[0, …, i].
Return the distinct difference array of nums.
Note that nums[i, …, j] denotes the subarray of nums starting at index i and ending at index j inclusive. Particularly, if i > j then nums[i, …, j] denotes an empty subarray.
Solution#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| /**
* @param {number[]} nums
* @return {number[]}
*/
const countDistinct = (map) => {
return [...map.entries()]?.filter(([key,value]) => value!==0).length
}
var distinctDifferenceArray = function(nums) {
const leftMap = new Map()
const rightMap = new Map()
let diff=[]
nums.forEach((num) => {
if(!rightMap.has(num)){
rightMap.set(num,1)
}else{
rightMap.set(num, rightMap.get(num)+1)
}
})
nums.forEach((num) => {
if(!leftMap.has(num)){
leftMap.set(num,1)
}
rightMap.set(num, rightMap.get(num)-1)
const countLeft = leftMap.size
const countRight = countDistinct(rightMap)
diff.push(countLeft-countRight)
})
return diff
};
|