【2022-06-05-第296场单周赛】

总结

寄!

Q1. 极大极小游戏

数据量小,模拟。

class Solution {
public:
    int minMaxGame(vector<int>& a) {
        vector<int> temp;
        if(a.size() == 1) return a[0];
        while(a.size() > 3){
            for(int i = 0; i < a.size(); i += 4){
                temp.push_back(min(a[i], a[i + 1]));
                temp.push_back(max(a[i + 2], a[i + 3]));
            }
            a.clear();
            a = temp;
            temp.clear();
        }
        return min(a[0], a[1]);
        
    }
};

Q2.划分数组使最大差为K

直接排序遍历好了,结果写了个二分,还写出bug,麻了。

class Solution {
public:
    int partitionArray(vector<int>& a, int k) {
        int n = a.size();
        sort(a.begin(), a.end());
        int t = 0, pre = a[0];
        for(int i = 0; i < n; ++i){
            if(a[i] - pre > k){
                ++t;
                pre = a[i];
            }
        }
        return t + 1;

    }
};

Q3.替换数组中的元素

哈希记录数字位置,依次修改。

class Solution {
public:
    vector<int> arrayChange(vector<int>& a, vector<vector<int>>& op) {
        int n = a.size();
        int h[1000010];
        for(int i = 0; i < 1000010; ++i) h[i] = -1; 
        for(int i = 0; i < n; ++i)  h[a[i]] = i;
        for(auto &i : op){
            h[i[1]] = h[i[0]];
            h[i[0]] = -1;
        }
        vector<int> res(n);
        for(int i = 0; i < 1000010; ++i){
            if(h[i] != -1) res[h[i]] = i;
        }
        return res;
    }
};

Q4.设计一个文本编辑器

没有仔细计算数据范围带来的时间复杂度问题,所以没有想到这特别简单的模拟,捣鼓了半天双链表,码力还是有所欠缺。

class TextEditor {
public:

    string s, r;

    TextEditor() {
        s = "";
        r = "";
    }
    
    void addText(string text) {
        s += text;
    }
    
    int deleteText(int k) {
        if(s.size() < k) k = s.size();
        for(int i = 0; i < k ; ++i) s.pop_back();
        return k;
    }
    
    string cursorLeft(int k) {
        if(s.size() <= k) k = s.size();
        for(int i = 0; i < k; ++i){
            r += s.back();
            s.pop_back();
        }
        return s.substr(max(0, (int)s.size() - 10), min(10, (int)s.size()));
    }
    
    string cursorRight(int k) {
        if(r.size() <= k) k = r.size();
        for(int i = 0; i < k; ++i){
            s += r.back();
            r.pop_back();
        }
        return s.substr(max(0, (int)s.size() - 10), min(10, (int)s.size()));
    }
};

/**
 * Your TextEditor object will be instantiated and called as such:
 * TextEditor* obj = new TextEditor();
 * obj->addText(text);
 * int param_2 = obj->deleteText(k);
 * string param_3 = obj->cursorLeft(k);
 * string param_4 = obj->cursorRight(k);
 */
posted on 2022-06-12 20:25  damnglamour  阅读(34)  评论(0)    收藏  举报