Welcome to Subscribe On Youtube
2670. Find the Distinct Difference Array
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.
Example 1:
Input: nums = [1,2,3,4,5] Output: [-3,-1,1,3,5] Explanation: For index i = 0, there is 1 element in the prefix and 4 distinct elements in the suffix. Thus, diff[0] = 1 - 4 = -3. For index i = 1, there are 2 distinct elements in the prefix and 3 distinct elements in the suffix. Thus, diff[1] = 2 - 3 = -1. For index i = 2, there are 3 distinct elements in the prefix and 2 distinct elements in the suffix. Thus, diff[2] = 3 - 2 = 1. For index i = 3, there are 4 distinct elements in the prefix and 1 distinct element in the suffix. Thus, diff[3] = 4 - 1 = 3. For index i = 4, there are 5 distinct elements in the prefix and no elements in the suffix. Thus, diff[4] = 5 - 0 = 5.
Example 2:
Input: nums = [3,2,3,4,2] Output: [-2,-1,0,2,3] Explanation: For index i = 0, there is 1 element in the prefix and 3 distinct elements in the suffix. Thus, diff[0] = 1 - 3 = -2. For index i = 1, there are 2 distinct elements in the prefix and 3 distinct elements in the suffix. Thus, diff[1] = 2 - 3 = -1. For index i = 2, there are 2 distinct elements in the prefix and 2 distinct elements in the suffix. Thus, diff[2] = 2 - 2 = 0. For index i = 3, there are 3 distinct elements in the prefix and 1 distinct element in the suffix. Thus, diff[3] = 3 - 1 = 2. For index i = 4, there are 3 distinct elements in the prefix and no elements in the suffix. Thus, diff[4] = 3 - 0 = 3.
Constraints:
1 <= n == nums.length <= 50
1 <= nums[i] <= 50
Solutions
-
class Solution { public int[] distinctDifferenceArray(int[] nums) { int n = nums.length; int[] suf = new int[n + 1]; Set<Integer> s = new HashSet<>(); for (int i = n - 1; i >= 0; --i) { s.add(nums[i]); suf[i] = s.size(); } s.clear(); int[] ans = new int[n]; for (int i = 0; i < n; ++i) { s.add(nums[i]); ans[i] = s.size() - suf[i + 1]; } return ans; } }
-
class Solution { public: vector<int> distinctDifferenceArray(vector<int>& nums) { int n = nums.size(); vector<int> suf(n + 1); unordered_set<int> s; for (int i = n - 1; i >= 0; --i) { s.insert(nums[i]); suf[i] = s.size(); } s.clear(); vector<int> ans(n); for (int i = 0; i < n; ++i) { s.insert(nums[i]); ans[i] = s.size() - suf[i + 1]; } return ans; } };
-
class Solution: def distinctDifferenceArray(self, nums: List[int]) -> List[int]: n = len(nums) suf = [0] * (n + 1) s = set() for i in range(n - 1, -1, -1): s.add(nums[i]) suf[i] = len(s) s.clear() ans = [0] * n for i, x in enumerate(nums): s.add(x) ans[i] = len(s) - suf[i + 1] return ans
-
func distinctDifferenceArray(nums []int) []int { n := len(nums) suf := make([]int, n+1) s := map[int]bool{} for i := n - 1; i >= 0; i-- { s[nums[i]] = true suf[i] = len(s) } ans := make([]int, n) s = map[int]bool{} for i, x := range nums { s[x] = true ans[i] = len(s) - suf[i+1] } return ans }
-
function distinctDifferenceArray(nums: number[]): number[] { const n = nums.length; const suf: number[] = new Array(n + 1).fill(0); const s: Set<number> = new Set(); for (let i = n - 1; i >= 0; --i) { s.add(nums[i]); suf[i] = s.size; } s.clear(); const ans: number[] = new Array(n); for (let i = 0; i < n; ++i) { s.add(nums[i]); ans[i] = s.size - suf[i + 1]; } return ans; }
-
use std::collections::HashSet; impl Solution { pub fn distinct_difference_array(nums: Vec<i32>) -> Vec<i32> { let n = nums.len(); let mut s = vec![0; n + 1]; let mut set = HashSet::new(); for i in (0..n).rev() { set.insert(nums[i]); s[i] = set.len(); } let mut ans = Vec::new(); set.clear(); for i in 0..n { set.insert(nums[i]); ans.push((set.len() - s[i + 1]) as i32); } ans } }