周 赛 补 题

竞赛 - 力扣 (LeetCode)

1.竞赛 - 力扣 (LeetCode)

一次遍历即可,注意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;
        
    }
};

竞赛 - 力扣 (LeetCode)

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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值