LeetCode 41双周赛

完成了三题。

题1解题代码:

class Solution {
public:
    int countConsistentStrings(string allowed, vector<string>& words) {
            unordered_set<char> e;
            for(auto &n:allowed)
            {
                e.emplace(n);
            }
            int i=0;
            int sum=0;
            while(i<words.size())
            {
                int j=0;
                while(j<words[i].size())
                {
                    if(e.find(words[i][j])==e.end())
                        break;
                    j++;
                }
                if(j==words[i].size())sum++;
                i++;
            }
        return sum;
    }
};

题2解题代码:

class Solution {
public:
    vector<int> getSumAbsoluteDifferences(vector<int>& nums) {
        int i=1;
        vector<int> res(nums.size());
        int t=0;
        while(i<nums.size())
        {
            t+=abs(nums[i]-nums[0]);
            i++;
        }
        res[0]=t;
        i=1;
        while(i<nums.size())
        {
            res[i]=res[i-1]+(nums[i]-nums[i-1])*(i-1)-(nums[i]-nums[i-1])*(nums.size()-1-i);
            i++;
        }
        return res;
    }
};

题3解题代码:

class Solution {
public:
    int stoneGameVI(vector<int>& aliceValues, vector<int>& bobValues) {
        vector<int> q(aliceValues.size());
        int i = 0;
        while (i < aliceValues.size())
        {
            q[i] = aliceValues[i] + bobValues[i];
            i++;
        }
        sor(q, aliceValues, bobValues, 0, bobValues.size() - 1);
        int n1 = 0;
        int n2 = 0;
        i = aliceValues.size() - 1;
        int j = 0;
        while (i > -1)
        {
            if (!j) { n1 += aliceValues[i]; j = 1; }
            else { n2 += bobValues[i]; j = 0; }
            i--;
        }
        if (n1 > n2)return 1;
        else if (n1 == n2)return 0;
        else
            return -1;
    };
    void sor(vector<int>& a, vector<int>& b, vector<int>& c, int left, int right)
    {
        if (left >= right)
            return;
        int i = left;
        int j = right;
        int k1 = a[left];
        int k2 = b[left];
        int k3 = c[left];
        while (i < j)
        {
            while (i < j && k1 <= a[j])
                j--;
            a[i] = a[j];
            b[i] = b[j];
            c[i] = c[j];
            while (i < j && k1 >= a[i])
                i++;
            a[j] = a[i];
            b[j] = b[i];
            c[j] = c[i];
        }
        a[i] = k1;
        b[i] = k2;
        c[i] = k3;
        sor(a, b, c, left, i - 1);
        sor(a, b, c, i + 1, right);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_36389986/article/details/111087213