码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 第 228 场周赛 赛后总结

时间:2021-02-17 14:32:43      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:细节   empty   air   bsp   begin   bin   get   ==   构造   

比赛地址:这里

T1:

技术图片

技术图片

    根据题意,符合题目要求的只有两种字符串:0101010…或1010101…,因此,我们可以直接构造这两种字符串并比较与原串的差异即可。

  附上代码:

 

class Solution {
public:
    int minOperations(string s) {
        int len = s.size();
        string s2 = s;
        for(int i = 0;i < len;i++)
        {
            if(i % 2 == 1) s2[i] = ‘1‘;
            if(i % 2 == 0) s2[i] = ‘0‘;
        }
        int minsum1 = 0, minsum2 = 0;
        for(int i = 0;i <len;i++)
            if(s[i] != s2[i]) minsum1++;
        for(int i = 0;i < len;i++)
        {
            if(i % 2 == 1) s2[i] = ‘0‘;
            if(i % 2 == 0) s2[i] = ‘1‘;
        }
        for(int i = 0;i < len;i++)
            if(s[i] != s2[i]) minsum2++;
        if(minsum1 > minsum2) return minsum2;
        return minsum1;
    }
};

 

T2:

技术图片

技术图片

    对于T2,我们可以考虑用数学方法处理。即统计每一个连续的相同的子串长度,并用求和公式求出值。

 代码:

class Solution {
public:
    long long countHomogenous(string s) {
        long long mod = 1e9 + 7;
        long long ans = 0, i = 0;
        int len = s.size();
        while(i < len)
        {
            int begin = i;
            int end = begin;
            while(end < len && s[end] == s[begin]) end++;
            i = end;
            end--;
            long long num = end - begin + 1;
            long long t = (1 + num) * num / 2;
            ans += t;
        }
        return (ans % mod);
    }
};

T3:

技术图片

技术图片

 由于T3数据较为庞大,我们考虑用二分法进行求解。

 代码如下:

class Solution {
public:
    int minimumSize(vector<int>& nums, int maxOperations) {
        int a[100005];
        vector < int > :: iterator it;
        int n = 0;
        for(it = nums.begin();it != nums.end();it++)
        {
            n++;
            a[n] = *it;
        }
        sort(a + 1, a + n + 1);
        int lft = 1, rgh = a[n], ans;
        while(lft <= rgh)
        {
            int mid = (lft + rgh) / 2;
            int sum = 0;
            for(int i = 1;i <= n;i++)
            {
                int t = ceil(a[i] * 1.0 / mid);
                sum += t - 1;
            }
            if(sum <= maxOperations) 
            {
                ans = mid;
                rgh = mid - 1;
            }
            else lft = mid + 1;
        }
        return ans;
    }
};

 T4:

技术图片

 

技术图片

技术图片 

  本题实际上是一道较为简单的暴力题(至少我觉得是这样的)。我们可以将符合条件的三元组保存起来,通过桶排求出每个点的度数,然后就可以求出这个三元组的度数。值得一提的是,这道题最难的地方在于STL的操作与运用,处理读入数据和输出数据花费了我不少时间。

  代码如下:

 

class Solution {
public:
    int minTrioDegree(int n, vector<vector<int>>& edges) {
        bool G[405][405];
        int bin[405];
        memset(bin, 0, sizeof(bin));
        memset(G, false, sizeof(G));
        vector < vector < int > > :: iterator it1;
        vector < int > :: iterator it2;
        vector < pair < int, pair < int, int > > > Trio;
        pair < int, int > ts;
        for(it1 = edges.begin();it1 != edges.end();it1++)
        {
            vector < int > t = *it1;
            int countn = 0, u, v;
            for(it2 = t.begin();it2 != t.end();it2++)
            {
                countn++;
                if(countn == 1) u = *it2;
                if(countn == 2) v = *it2;
            }
            G[u][v] = G[v][u] = true;
            bin[u]++;
            bin[v]++;
        }
        for(int x = 1;x <= n;x++)
            for(int y = x + 1;y <= n;y++)
                for(int z = y + 1;z <= n;z++)
                    if(G[x][y] && G[y][z] && G[x][z])
                        Trio.push_back(make_pair(x, make_pair(y, z)));
        if(Trio.empty()) return -1;
        vector < pair < int, pair < int, int > > > :: iterator it;
        int ans = INT_MAX;
        for(it = Trio.begin();it != Trio.end();it++)
        {
            ts = it->second;
            int tsum = bin[it->first] + bin[ts.first] + bin[ts.second] - 6;
            ans = min(ans, tsum);
        }
        return ans;
    }
};

  总结:

  其实本场比赛并不难,但较为注重细节。由于我的粗心大意,我T4竟然没有来得及做完,比赛就停止了!一定得好好吸取教训!

 

Leetcode 第 228 场周赛 赛后总结

标签:细节   empty   air   bsp   begin   bin   get   ==   构造   

原文地址:https://www.cnblogs.com/fy4815/p/14401878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!