#题目链接https://leetcode.cn/problems/find-the-distinct-difference-array/description/
官方题解+解析
class Solution {
public:
vector<int> distinctDifferenceArray(vector<int>& nums) {
int n = nums.size();
unordered_set<int> st;
vector<int> sufCnt(n + 1, 0); //初始化长度为n+1的数组,内部元素为0
for(int i = n-1; i > 0; i--){ //从最后一个开始遍历
st.insert(nums[i]); //倒序插入元素
sufCnt[i] = st.size(); //计算当前set的size,也就是从当前倒序元素之后的不相同的元素个数。
}
vector<int> res;
st.clear(); //清空set
for(int i = 0; i < n; i++){
st.insert(nums[i]); //从前往后读取并向新初始化的set中添加元素,
//下面的st.size()也就是从当前元素之前不相同的元素个数。
res.push_back(int(st.size() - sufCnt[i + 1]));
//为什么上面要i+1?
//因为题目要求是:
//(包括当前元素在内的前部分不同元素个数-不包含当前元素在内的后半部分)
//所以i+1
}
return res;
}
};