- 将所有数字用字符替换
var replaceDigits = function(s) {
let arr = s.split("");
for(let i=1;i<arr.length;i+=2) {
arr[i] = String.fromCharCode(arr[i-1].charCodeAt(0) + +arr[i]);
}
return arr.join("");
};
- 座位预约管理系统
var SeatManager = function(n) {
this.arr = new Array(n).fill(0);
this.left = 0;
this.right = 1;
};
SeatManager.prototype.reserve = function() {
let res = this.left + 1;
this.arr[this.left] = 1;
this.left = this.right;
this.right++;
if(this.arr[this.right] === 1) {
while(this.arr[this.right] === 1) {this.right++;}
}
return res;
};
SeatManager.prototype.unreserve = function(seatNumber) {
seatNumber = seatNumber - 1;
if(seatNumber < this.left) {
this.right = this.left;
this.left = seatNumber;
}
else if(seatNumber>this.left && seatNumber<this.right) {
this.right = seatNumber;
}
this.arr[seatNumber] = 0;
};
- 减小和重新排列数组后的最大元素
var maximumElementAfterDecrementingAndRearranging = function(arr) {
if(arr.length === 1) return 1;
arr.sort((a,b) => a-b);
if(arr[0] !== 1) arr[0] = 1;
for(let i=1;i<arr.length;i++) {
if(arr[i] > arr[i-1]+1) arr[i] = arr[i-1] + 1;
}
return arr[arr.length-1];
};
- 最近的房间
看错题目了,还没A出来,题解参考他人:
struct Block {
int min_size = INT_MAX;
vector<int> ids;
vector<pair<int, int>> origin;
Block() = default;
void insert(int id, int size) {
origin.emplace_back(id, size);
ids.push_back(id);
min_size = min(min_size, size);
}
void sort() {
::sort(ids.begin(), ids.end());
}
int geq(int preferred) {
auto it = lower_bound(ids.begin(), ids.end(), preferred);
return it == ids.end() ? -1 : *it;
}
int lt(int preferred) {
auto it = upper_bound(ids.begin(), ids.end(), preferred);
return it == ids.begin() ? -1 : *prev(it);
}
};
class Solution {
private:
static constexpr int BLOCK_SIZE = 300;
public:
vector<int> closestRoom(vector<vector<int>>& rooms, vector<vector<int>>& queries) {
int n = rooms.size();
int q = queries.size();
sort(rooms.begin(), rooms.end(), [](const auto& r1, const auto& r2) { return r1[1] < r2[1]; });
vector<Block> blocks;
for (int i = 0; i < n; ++i) {
if (i % BLOCK_SIZE == 0) {
blocks.emplace_back();
}
blocks.back().insert(rooms[i][0], rooms[i][1]);
}
for (auto&& block: blocks) {
block.sort();
}
vector<int> ans(q, -1);
for (int i = 0; i < q; ++i) {
int preferred = queries[i][0];
int minsize = queries[i][1];
int mindiff = INT_MAX;
for (auto it_block = blocks.rbegin(); it_block != blocks.rend(); ++it_block) {
auto&& block = *it_block;
if (block.origin[0].second >= minsize) {
int c1 = block.geq(preferred);
if (c1 != -1 && c1 - preferred < mindiff) {
mindiff = c1 - preferred;
ans[i] = c1;
}
int c2 = block.lt(preferred);
if (c2 != -1 && preferred - c2 <= mindiff) {
mindiff = preferred - c2;
ans[i] = c2;
}
}
else {
auto&& rooms = block.origin;
for (auto it_room = rooms.rbegin(); it_room != rooms.rend(); ++it_room) {
if (it_room->second >= minsize) {
int diff = abs(it_room->first - preferred);
if (diff < mindiff || (diff == mindiff && it_room->first < ans[i])) {
mindiff = diff;
ans[i] = it_room->first;
}
}
else {
break;
}
}
break;
}
}
}
return ans;
}
};
作者:zerotrac2
链接:https://leetcode-cn.com/problems/closest-room/solution/ni-yong-yuan-ke-yi-xiang-xin-fen-kuai-su-88a4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。