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; }};