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
| class Solution { public int[] distinctDifferenceArray(int[] nums) { int[] prefix = new int[nums.length]; int[] suffix = new int[nums.length];
Set<Integer> prefixSet = new HashSet<>(); Set<Integer> suffixSet = new HashSet<>(); prefixSet.add(nums[0]); suffixSet.add(nums[nums.length - 1]); prefix[0] = prefixSet.size(); suffix[suffix.length - 1] = suffixSet.size();
for (int i = 1; i < nums.length; i++) { prefixSet.add(nums[i]); prefix[i] = prefixSet.size(); suffixSet.add(nums[nums.length - 1 - i]); suffix[nums.length - 1 - i] = suffixSet.size(); }
int[] diff = new int[nums.length]; for (int i = 0; i < diff.length; i++) { diff[i] = prefix[i] - (i + 1 < suffix.length ? suffix[i + 1] : 0); } return diff; } }
|
若正序与逆序在一个 for 循环中遍历,则需要注意数组的索引。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public int[] distinctDifferenceArray(int[] nums) { int[] suffix = new int[nums.length + 1]; Set<Integer> set = new HashSet<>(); for (int i = nums.length - 1; i > 0; i--) { set.add(nums[i]); suffix[i] = set.size(); }
set.clear(); int[] diff = new int[nums.length]; for (int i = 0; i < diff.length; i++) { set.add(nums[i]); diff[i] = set.size() - suffix[i + 1]; } return diff; } }
|
References
2670. Find the Distinct Difference Array