抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

GG

5730. 将所有数字用字符替换

简单模拟题目

1
2
3
4
5
6
7
8
9
class Solution {
public:
string replaceDigits(string s) {
for(int i=0;i<s.size(); i+=2) {
s[i+1] = s[i]+(s[i+1]-'0');
}
return s;
}
};

5731. 座位预约管理系统

数据结构题, 维护一个 set 就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class SeatManager {
set<int> s;
public:
SeatManager(int n) {
s.clear();
for(int i=1;i<=n;i++) s.insert(i);
}

int reserve() {
int mn = *s.begin();
s.erase(mn);
return mn;
}

void unreserve(int x) {
s.insert(x);
}
};

5732. 减小和重新排列数组后的最大元素

开始想都没想就搞二分了。。。搞了半天

后面发现只要拍个序 模拟一下就好了, 如果这个一个减上一个超过 1, 就变成上一个的值 +1.

没看到题目说 第一个 必须为 1 wa 了一发。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int maximumElementAfterDecrementingAndRearranging(vector<int>& arr) {
int n = arr.size();
sort(arr.begin(), arr.end());
arr[0]=1;
for(int i=1;i<arr.size();i++) {
if(arr[i] > arr[i-1]+1) {
arr[i] = arr[i-1]+1;
}
}

return arr[n-1];
}
};

5733. 最近的房间

这个题本身也不难, 数据和查询两个数组按照 size 从大到小拍个序就好了。 搞个 set 维护 roomId。 set 自带的二分查找下就行了。 因为是绝对值就再维护个负值的 set(后面看了其他大佬的代码发现迭代器减一下就行了)。

不太会用 set, 不会写 c++ 的匿名函数,, 后面判断逻辑又少了, GG。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
bool cmp(vector<int>& a, vector<int>& b) {
return a[1] > b[1];
}

class Solution {
public:
vector<int> closestRoom(vector<vector<int>>& rooms, vector<vector<int>>& q) {
vector<int> ans(q.size());

for(int i = 0; i<q.size(); i++) {
q[i].push_back(i);
ans[i] = -1;
}
sort(rooms.begin(), rooms.end(), cmp);
sort(q.begin(), q.end(), cmp);

int p = 0,as,asf;
set<int> s, sf;

for(auto& qq: q) {
for(;p<rooms.size() && rooms[p][1] >= qq[1]; p++) {
s.insert(rooms[p][0]);
sf.insert(-rooms[p][0]);
}

as = asf = -1;
auto it = s.lower_bound(qq[0]);
if(it!=s.end()) {
as = (*it) - qq[0];
ans[qq[2]] = (*it);
}

auto it2 = sf.lower_bound(-qq[0]);
if(it2 != sf.end()) {
asf = (*it2) - (-qq[0]);
if(ans[qq[2]] == -1 || asf <= as) ans[qq[2]] = -(*it2);
}
}

return ans;
}
};

评论