思路:简单的模拟而已
class Solution { public: int averageValue(vector<int>& nums) { int res = 0, count = 0; for(int i = 0; i < nums.size(); i++){ if(nums[i] % 3 == 0 && nums[i] % 2 == 0){ res += nums[i]; count++; } } if(res) res /= count; return res; } };
第二题:6221. 最流行的视频创作者
思路:用两个哈希表来记录播放量总和与id,id不断更新为播放量大的或者字典序在前面的,最后将最大播放量的一个或者几个存入答案数组即可
class Solution { public: vector<vector<string>> mostPopularCreator(vector<string>& creators, vector<string>& ids, vector<int>& views) { int n = ids.size(); unordered_map<string,long long> mp1;//记录播放量总和 unordered_map<string,int> mp2;//记录播放量最大视频的id for(int i = 0; i < n; i++){ mp1[creators[i]] += views[i]; if(mp2.count(creators[i])){ int &t = mp2[creators[i]]; if(views[i] > views[t] || (views[i] == views[t] && ids[i] < ids[t])) t = i; } else mp2[creators[i]] = i; } long long mx = -1; for(auto t = mp1.begin(); t != mp1.end(); t++) mx = max(mx, t->second); vector<vector<string>> res; for(auto t = mp1.begin(); t != mp1.end(); t++){ if(t->second == mx) res.push_back({t->first, ids[mp2[t->first]]}); } return res; } };
思路:要使整数每一位上的数字相加小于或等于target,如果一开始就小于则直接返回0,否则我们需要从个位开始进位来看是否满足题意,用tmp来记录每一位上的数字需要进位所加的数,直到进位满足题意就是所需要的值。
class Solution { public: typedef long long LL; int sum(LL n){ int res = 0; while(n){ res += n % 10; n /= 10; } return res; } long long makeIntegerBeautiful(LL n, int target) { vector<LL> tmp; LL num = n, i = 0, count = 0; if(sum(n) <= target) return 0; while(num){ count += num % 10 * pow(10,i); num /= 10; //cout<<count<<" "; tmp.push_back(pow(10,i + 1) - count); i++; } for(int i = 0; i < tmp.size(); i++){ if(sum(n + tmp[i]) <= target) return tmp[i]; } return 0; } };
思路:暴力来做,遍历queries,dfs来求树的深度,遇到空或者queries[i]就返回,但是数据范围在1e5内,最后几个数据会超时。可以用树状dp来解决 目前还不会该知识点 后期记得再来补
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ /*class Solution { public: int dfs(TreeNode* root, int n){ if(root == nullptr || root->val == n){ return 0; } int leftdepth = dfs(root->left, n); // 左 int rightdepth = dfs(root->right, n); // 右 int depth = 1 + max(leftdepth, rightdepth); // 中 return depth; } vector<int> treeQueries(TreeNode* root, vector<int>& queries) { vector<int> res; for(int i = 0; i < queries.size(); i++){ res.push_back(dfs(root, queries[i]) - 1); } return res; } }; */