正文索引 [隐藏]

传送门→

这双周赛改成贪心赛算了,fo了。

A拥有糖果最多的孩子

贪心+暴力。两重循环外层枚举每一个小朋友,内层去找当前的最大糖果数量。如果当前小朋友的糖加上额外给的能大于等于这个最大值就push一个1进去,否则push一个0。

class Solution {
public:
    vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
        vector<bool> ans;
        int n = candies.size();
        for(int i = 0; i < n; i++)
        {
            int maxn = 0;
            for(int j = 0; j < n; j++)
                if(i == j) continue;
                else maxn = max(maxn, candies[j]);
            if(candies[i] + extraCandies >= maxn)
                ans.push_back(true);
            else
                ans.push_back(false);
        }
        return ans;
    }
};

B改变一个整数能得到的最大差值

还是暴力。对每一个数位进行枚举。
三层循环外层枚举a中层枚举b内层枚举每一位。
设临时变量cur为当前数位上的值,如果cur==a就把它换成b。
设target为当前换出来得的数。如果有前导0就令target=0并结束循环。每次枚举数位结束后更新maxn与minn的值并判断操作是否合法,最终答案就是maxn-minn。

class Solution {
public:
    int maxDiff(int num) {
        int top = 0;
        int dig[10];
        
        int v = num;
        while(v)
        {
            dig[++top] = v % 10;
            v /= 10;
        }
        
        int maxn = num;
        int minn = num;
        
        for(int i = 0; i < 10; i++)
        {
            for(int j = 0; j < 10; j++)
            {
                int tar = 0;
                for(int k = top; k >= 1; k--)
                {
                    int cur = dig[k];
                    if(cur == i) cur = j;
                    if(k == top && cur == 0)
                    {
                        tar = 0;
                        break;
                    }
                    tar = tar * 10 + cur; 
                }
                if(tar == 0) continue;
                minn = min(minn, tar);
                maxn = max(maxn, tar);
            }
        }
        return maxn - minn;
    }
};

C检查一个字符串是否可以打破另一个字符串

题目定义了:
字符串 x 可以”打破”字符串 y 当且仅当对于所有 i 都有x[i] >= y[i]。
其中x==y==n, 0<=i<=n-1, 字符大小按字典序顺序定义。

其实还是贪心。按照题目描述,一个能打破字符串x的字符串y,一定存在一个满足”y的第k大字符>= x的第k大字符”的排列。那按照这个条件,sort两个字符串然后按位比较就行了。

class Solution {
public:
    bool checkIfCanBreak(string s1, string s2) {
        int n = s1.size();
        
        sort(s1.begin(), s1.end());
        sort(s2.begin(), s2.end());

        bool check1 = 1;
        for(int i = 0; i < n; i++)
            if(s1[i] < s2[i])
            {
                check1 = 0;
                break;
            }
        bool check2 = 1;
        for(int i = 0; i < n; i++)
            if(s2[i] < s1[i])
            {
                check2 = 0;
                break;
            }
        
        if(check1 || check2) return true;
        else return false;
    }
};