Leetcode第 296 场周赛
6090. 极大极小游戏
class Solution {
public:
int minMaxGame(vector<int>& nums) {
if(nums.size()==1) return nums[0];
vector<int> v;
for(int i=0;i<nums.size();i+=2) {
if((i/2)%2==0) v.push_back(min(nums[i],nums[i+1]));
else v.push_back(max(nums[i],nums[i+1]));
}
return minMaxGame(v);
}
};
6091. 划分数组使最大差为 K
class Solution {
public:
int partitionArray(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int ans = 1;
int left = nums[0];
for(int i=0;i<nums.size();i++) {
if(nums[i]-left>k) {
ans++;
left = nums[i];
}
}
return ans;
}
};
6092. 替换数组中的元素
可以map写是:题目保证在第 i 个操作中:
operations[i][0] 在 nums 中存在。
operations[i][1] 在 nums 中不存在。
class Solution {
public:
vector<int> arrayChange(vector<int>& nums, vector<vector<int>>& operations) {
unordered_map<int,int> mp;
for(int i=0;i<nums.size();i++)
mp[nums[i]] = i;
for(int i=0;i<operations.size();i++) {
nums[mp[operations[i][0]]] = operations[i][1];
mp[operations[i][1]] = mp[operations[i][0]];
mp.erase(operations[i][0]);
}
return nums;
}
};
6093. 设计一个文本编辑器
比赛的时候想着这个思路,然后用substr一直超时 后来看榜单代码 直接k操作 回头一看k<=40. 后来看超时的样例 字符很长 我调用substr(0,ix) 这是线性操作难免超时
class TextEditor {
public:
string left,right;
int ix;
TextEditor() {
left = right = "";
}
void addText(string text) {
left += text;
}
int deleteText(int k) {
int len = left.size();
k = min(k,len);
for(int i=0;i<k;i++) left.pop_back();
return k;
}
string cursorLeft(int k) {
int len = left.size();
k = min(k,len);
for(int i=0;i<k;i++){
right.push_back(left.back());
left.pop_back();
}
string ans(left.end()-min(10,int(left.size())),left.end());
return ans;
}
string cursorRight(int k) {
int len = right.size();
k = min(k,len);
for(int i=0;i<k;i++) {
left.push_back(right.back());
right.pop_back();
}
string ans(left.end()-min(10,int(left.size())),left.end());
return ans;
}
};