../ Competitive Programming
-rw-r--r--aguang2.8 KiB2 min read

Leet Code Weekly Contest 296

1. Min Max Game

  • Simulation.
c++
class Solution {
public:
    int minMaxGame(vector<int>& nums) {
        while (nums.size() > 1) {
            vector<int> tmp;
            for (int i = 0, j = 0; i + 1 < nums.size(); i += 2, j = 1 - j) {
                tmp.push_back(j == 0 ? min(nums[i], nums[i + 1]) : max(nums[i], nums[i + 1]));
            }
            nums = tmp;
        }
        return nums.front();
    }
};

2. Partition Array Such That Maximum Difference Is K

  • Sort.
c++
class Solution {
public:
    int partitionArray(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end());
        int ans = 0;
        for (auto i = nums.begin(); i != nums.end(); i = upper_bound(nums.begin(), nums.end(), (*i) + k)) {
            ++ans;
        }
        return ans;
    }
};

3. Replace Elements in an Array

  • Hash.
c++
class Solution {
public:
    vector<int> arrayChange(vector<int>& nums, vector<vector<int>>& operations) {
        unordered_map<int, int> mappings;
        for (int i = operations.size() - 1; i >= 0; i--) {
            auto o = operations[i];
            mappings[o[0]] = mappings.count(o[1]) ? mappings[o[1]] : o[1];
        }
        for (auto &x : nums) {
            if (mappings.count(x)) {
                x = mappings[x];
            }
        }
        return nums;
    }
};

4. Design a Text Editor

  • Listed-list.
c++
class TextEditor {
private:
    list<char> _s;
    list<char>::iterator _p;

public:
    TextEditor() {
        _p = _s.begin();
    }
    
    void addText(string text) {
        _p = _s.insert(_p, text.begin(), text.end());
        for (int i = 0; i < text.length(); i++) {
            _p = next(_p);
        }
    }
    
    int deleteText(int k) {
        int ret = 0;
        auto t = _p;
        while (k--) {
            if (t != _s.begin()) {
                t = prev(t);
                ret++;
            }
        }
        _p = _s.erase(t, _p);
        return ret;
    }
    
    string cursorLeft(int k) {
        while (k-- > 0) {
            if (_p != _s.begin()) {
                _p = prev(_p);
            }
        }
        int l = 10;
        string ret;
        for (auto q = _p; l > 0; l--) {
            if (q != _s.begin()) {
                q = prev(q);
                ret.push_back(*q);
            }
        }
        reverse(ret.begin(), ret.end());
        return ret;
    }
    
    string cursorRight(int k) {
        while (k-- > 0) {
            if (_p != _s.end()) {
                _p = next(_p);
            }
        }
        int l = 10;
        string ret;
        for (auto q = _p; l > 0; l--) {
            if (q != _s.begin()) {
                q = prev(q);
                ret.push_back(*q);
            }
        }
        reverse(ret.begin(), ret.end());
        return ret;
    }
};

COMMAND INTERFACE

↑ ↓ navigate · Enter execute · Esc exit · try “whoami”

Loading filesystem…

:help aguang.xyz

A personal website disguised as an operating system.

Ctrl / Cmd + K
Command palette + full-text search
Tab / Shift + Tab
Move between links and controls
Enter
Open a focused link or search result
↑ / ↓ in search
Navigate search results
In a directory filter
Enter/Done or ↓ focuses a result; Esc clears the filter
Esc
Clear a search or close a window