6416. 找出不同元素数目差数组
题解:前后缀和
class Solution {
public:
vector<int> distinctDifferenceArray(vector<int>& nums) {
set<int> s;
int n = nums.size();
vector<int> f(n+1), g(n+1);
for(int i=0; i<n; i++){
s.insert(nums[i]);
f[i] = s.size();
}
s.clear();
for(int i=n-1; i>=0; i--){
s.insert(nums[i]);
g[i] = s.size();
}
vector<int> res;
for(int i=0; i<n; i++){
res.push_back(f[i] - g[i+1]);
}
return res;
}
};
6417. 频率跟踪器
题解:哈希表
class FrequencyTracker {
public:
unordered_map<int ,int> hash;
unordered_map<int, unordered_set<int>> feq;
FrequencyTracker() {
}
void add(int number) {
feq[hash[number]].erase(number);
hash[number]++;
feq[hash[number]].insert(number);
}
void deleteOne(int number) {
if(hash.count(number)){
feq[hash[number]].erase(number);
int cnt = hash[number];
if(cnt > 1){
cnt--;
feq[cnt].insert(number);
hash[number] = cnt;
}else{
hash.erase(number);
}
}
}
bool hasFrequency(int frequency) {
return feq[frequency].size();
}
};
/**
* Your FrequencyTracker object will be instantiated and called as such:
* FrequencyTracker* obj = new FrequencyTracker();
* obj->add(number);
* obj->deleteOne(number);
* bool param_3 = obj->hasFrequency(frequency);
*/
6418. 有相同颜色的相邻元素数目
题解:模拟
class Solution {
public:
vector<int> colorTheArray(int n, vector<vector<int>>& queries) {
vector<int> res;
int color[n];
memset(color, 0, sizeof color);
int cur = 0;
for(auto q : queries){
int idx = q[0];
if(idx-1 >= 0 && color[idx-1] == color[idx] && color[idx] != 0) cur--;
if(idx+1 < n && color[idx+1] == color[idx] && color[idx] != 0) cur--;
color[idx] = q[1];
if(idx-1 >=0 && color[idx-1] == color[idx] && color[idx] != 0) cur++;
if(idx+1 < n && color[idx+1] == color[idx] && color[idx] != 0) cur++;
res.push_back(cur);
}
return res;
}
};
6419. 使二叉树所有路径值相等的最小代价
题解: DFS
class Solution {
public:
vector<int> c;
int res;
int dfs(int x, int n){
if(x > n) return 0;
int l = dfs(x*2, n);
int r = dfs(x*2+1, n);
res += abs(l - r);
return max(l, r) + c[x-1];
}
int minIncrements(int n, vector<int>& cost) {
c = cost;
dfs(1, n);
return res;
}
};