第一题
题目:
解法:等于能被六整除,没啥说的。
第二题
题目:
解法:狗屎模拟题,又臭又长,用python的话可以考虑用zip绑定三个数组,用一个字典来记录以下信息:key:名字,内容:总播放量、最高的单体播放量以及该作品的编号。同时维护一个外部变量记录总播放量的最大值,处理完字典后就可以遍历字典输出总播放量等于播放量的最大值的答案数组了(记录一下写起来pair套pair的c++写法)
class Solution {
public:
vector<vector<string>> mostPopularCreator(vector<string>& creators, vector<string>& ids, vector<int>& views) {
unordered_map<string,pair<long,pair<int,string>>> map;//key是名字,内容是总播放量、最高的单体播放量以及该作品的编号,但是c++的字典内容只有一个,所以要保存三个只能pair嵌套
int n = creators.size();
long m = 0;//最大播放量
for(int i = 0; i < n; i++) {
if(!map.count(creators[i])) map[creators[i]] = pair(views[i], pair(views[i], ids[i]));
else {
map[creators[i]].first += views[i];
if(views[i] > map[creators[i]].second.first ||
(views[i] == map[creators[i]].second.first && ids[i] < map[creators[i]].second.second))
map[creators[i]].second = pair(views[i], ids[i]);
}
m = max(m, map[creators[i]].first);
}
vector<vector<string>> ans;
for(auto it = map.begin(); it != map.end(); it++) {
if(it->second.first == m) ans.push_back({it->first, it->second.second.second});
}
return ans;
}
};
第三题
题目:
解法:比较简单的贪心题,很容易发现一个不是美丽整数的数想要变成美丽整数,只需要把从个位开始的数变成0就可以了,变成0加的最少,每位加起来的和减少的最多。
第四题
题目:
解法:考虑删除6时的情况:
将6连同父节点(往上找一个)所在的树用红色框出,此时有两种情况:
①红色树之外的部分最大深度最大为当前答案(即删除其父节点4时的答案)。
②父节点的另一半子树的深度最大为答案(此例子中为右子树5、7。如果另一半为空的则为其父的深度)。
所以我们只要知道了第二种情况的答案就可以知道所有情况的答案了(第一种情况可以通过记忆化搜索记录父节点答案得到)。而第二种情况对于某一点的深度(通过深度加左右子树高度得到:例如例子中的情况:右子树深度等于4的深度+5的高度得到)提前遍历一遍即可得到,两次dfs解决本题:
class Solution {
public:
vector<int> treeQueries(TreeNode *root, vector<int> &queries) {
unordered_map<TreeNode*, int> height; // 每棵子树的高度
function<int(TreeNode*)> get_height = [&](TreeNode *node) -> int {
return node ? height[node] = 1 + max(get_height(node->left), get_height(node->right)) : 0;
};
get_height(root);
int res[height.size() + 1]; // 每个节点的答案
function<void(TreeNode*, int, int)> dfs = [&](TreeNode *node, int depth, int rest_h) {
if (node == nullptr) return;
++depth;
res[node->val] = rest_h;
dfs(node->left, depth, max(rest_h, depth + height[node->right]));
dfs(node->right, depth, max(rest_h, depth + height[node->left]));
};
dfs(root, -1, 0);
for (auto &q : queries) q = res[q];
return queries;
}
};
以上题解只是对灵神题解的总结,非原创捏1