Leetcode周赛283

Excel 表中某个范围内的单元格

thinking

模拟即可

solution

class Solution {
public:
    vector<string> cellsInRange(string s) {
        char left=s[0];
        char right=s[3];
        char l=s[1];
        char r=s[4];
        vector<string> ans;
        for(;left<=right;++left){
            for(char ll=l;ll<=r;++ll) {
                string s="aa";
                s[0]=left;
                s[1]=ll;
                ans.push_back(s);
            }
        }
        return ans;
    }
};

向数组中追加 K 个整数

thinking

区间之间使用等差公式

solution

class Solution {
public:
    long long minimalKSum(vector<int>& nums, int k) {
        long long ans=0;int n=nums.size();
        sort(nums.begin(),nums.end());
        long long left=1;
        if(nums[0]!=1) {
            ans+=1;
            --k;
        }
        long long kk=k;
        for(int i=0;i<n&&k;++i) {
            long long right=nums[i];
            int cnt=right-left-1;
            if(cnt>0) {
                if(cnt<=kk) {//k够用
                    kk-=cnt;
                    ans+=(left+right)*(right-left+1)/2-left-right;
                }else {//k不够用
                    ans+=kk*left+(kk+1)*kk/2;
                    kk=0;
                }
            }
            left=nums[i];
        }
        long long num=nums[n-1];
        if(kk) ans+=kk*num+(kk+1)*kk/2;
        return ans;
    }
};

根据描述创建二叉树

thinking

给每个值设计节点,按照给定的数组建立指向关系即可

solution

class Solution {
public:
    TreeNode* createBinaryTree(vector<vector<int>>& d) {
        unordered_map<int,TreeNode*> a;
        int ans=0;
        for(auto val:d) {
            if(!a.count(val[0])) {a[val[0]]=new TreeNode(val[0]);ans+=val[0];}
            if(!a.count(val[1])) {a[val[1]]=new TreeNode(val[1]);ans+=val[1];}
        }
        for(auto val:d) {
            if(val[2]) {//==1 
                a[val[0]]->left=a[val[1]];
            } else {
                a[val[0]]->right=a[val[1]];
            }
        ans-=val[1];
        }
        //cout<<ans;
        return a[ans];
    }
};

替换数组中的非互质数

thinking

使用栈进行模拟,我们将每一次进栈的元素与栈顶元素进行操作,进行合并。当遍历完数组时,栈内元素就是我们的答案。

solution

class Solution {
public:
    vector<int> replaceNonCoprimes(vector<int>& nums) {
        int n=nums.size();
        vector<int> s={nums[0]};
        for(int i=1;i<n;++i) {
            s.push_back(nums[i]);
            while(s.size()>1) {
                int x=s.back();int y=s[s.size()-2];
                int num=gcd(x,y);
                if(num==1) break;
                s.pop_back();
                s.back()*=x/num;
            }
        }
        return s;
    }
};
posted @ 2022-03-06 15:23  圣道  阅读(15)  评论(0)    收藏  举报