一次遍历即可,注意x = 0的情况,这种情况下a/0是没有意义的,要返回0
class Solution {
public:
int averageValue(vector<int>& nums) {
int x=0,a=0;
for(int i=0;i<nums.size();i++){
if(nums[i]%2==0&&nums[i]%3==0) {
a+=nums[i];
x++;
}
}
return x==0? 0:a/x;
}
};
2.力扣
多重哈希表查询,按照题意往下模拟即可,本题难点在于条件分支比较多容易忽略,和注意过程中有多个view相加溢出的情况,需要定义long long 类型 求最大值,防止数溢出.
class Solution {
public:
vector<vector<string>> mostPopularCreator(vector<string>& creators, vector<string>& ids, vector<int>& views) {
vector<vector<string>> vec;
map<string,long long> mp;
//mp1对应creators映射ids[i]
map<string,string> mp1;
map<string,int> mp2;
map<string,long long>::iterator it;
long long max_num = 0;
for(int i=0;i<creators.size();i++){
string a = creators[i];
string b = ids[i];
if(!mp1.count(a)){
mp1[a] = b;
mp2[a] = i;
}
if(mp1.count(a)&&views[i]>views[mp2[a]]){
mp1[a] = b;
mp2[a] = i;
}
if(mp1.count(a)&&views[i]==views[mp2[a]]&&ids[i]<ids[mp2[a]]){
mp1[a] = b;
mp2[a] = i;
}
}
for(int i=0;i<views.size();i++){
string s = creators[i];
mp[s]+=views[i];
max_num = max(mp[s],max_num);
}
for(it=mp.begin();it!=mp.end();it++){
if(it->second==max_num){
vector<string> a;
a.push_back(it->first);
a.push_back(mp1[it->first]);
vec.push_back(a);
}
}
return vec;
}
};
1.力扣
找到差值数组不同的唯一一个字符串,可以用string来对比例如"abc"=>"3,-1,"
建立条件:用哈希表(count)存储字符跟下标pair<string,int>,两组下标和ans=0
解决条件:count.size == 2, ans-curIndex
class Solution {
public:
string oddString(vector<string>& words) {
int m = words.size();
int n = words[0].size();
unordered_map<string, int> count;
int ans = 0;
for (int i = 0;i < m;++i)
{
string index_str;
for (int j = 0;j < n - 1;++j)
{
index_str = index_str + to_string(int(words[i][j + 1]) - int(words[i][j])) + ",";
}
if (count.size() < 2 && !count.count(index_str))
count[index_str] = i, ans += i;
else if (count.size() == 2)
{
ans -= count[index_str];
break;
}
}
return words[ans];
}
};
2.力扣
循环遍历查询,如果匹配字母不同count+1
class Solution {
public:
vector<string> twoEditWords(vector<string>& queries, vector<string>& dictionary) {
vector<string> ans;
int n = queries[0].size();
auto isMatch = [&](const string& q, const string& d) {
int count = 0;
for (int i = 0;i < n;++i)
if (q[i] != d[i]) ++count;
return count <= 2;
};
for (auto&& q : queries)
{
for (auto&& d : dictionary)
{
if (isMatch(q, d))
{
ans.emplace_back(q);
break;
}
}
}
return ans;
}
};