☘前言☘
开更五月集训专题,由浅入深,深入浅出,飞向大厂!
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
⏳全文大约阅读时间: 20min
全文目录
1441. 用栈操作构建数组
解题思路
直接记录当前的值,然后如果没到要的结果就进行push然后pop,当前值就可以加一,一直重复道能push为止。
代码
class Solution {
public:
vector<string> buildArray(vector<int>& target, int n) {
vector<string> ans;
int now = 1;
for(auto targeti : target){
while(now < targeti) ans.push_back("Push"),ans.push_back("Pop"),++now;
ans.push_back("Push");
++now;
}
return ans;
}
};
注意的点
简单题,大水题。
1021. 删除最外层的括号
解题思路
记录一下当前的位置,然后跳过最外层的括号就好了。
代码
class Solution {
public:
string removeOuterParentheses(string s) {
map<char,int> hash;
hash['('] = 1;hash[')'] = -1;
int top = 0;
string ans = "";
for(auto ch :s){
top += hash[ch];
if((ch == '(' && top == 1)||(ch == ')' && top == 0)) //跳过最外层
continue;
ans.push_back(ch);
}
return ans;
}
};
注意的点
- 没啥
1700. 无法吃午餐的学生数量
解题思路
直接模拟就好了,用flag记录是否一次循环是否有人拿到了三明治。
代码
class Solution {
class Solution {
public:
int countStudents(vector<int>& students, vector<int>& sandwiches) {
bool flag = true;
while(flag){
flag = false;
int size = students.size();
for(int i = 0;i < size;++i)
if(students[0] == sandwiches[0]) students.erase(students.begin()),sandwiches.erase(sandwiches.begin()),flag = true;
else students.push_back(students[0]),students.erase(students.begin());
}
return students.size();
}
};
注意的点
用了用erase方法,可以删除掉第一个元素。
1381. 设计一个支持增量操作的栈
解题思路
直接模拟
代码
class CustomStack {
vector<int> stk;
int top = -1;
public:
CustomStack(int maxSize) {
top = -1;
stk.resize(maxSize,0);
}
void push(int x) {
if(top < (int)stk.size() - 1)
stk[++top] = x;
}
int pop() {
if(top >= 0){
--top;
return stk[top + 1];
}
else return -1;
}
void increment(int k, int val) {
for(int i = 0;i < k && i <= top;++i)
stk[i] += val;
}
};
注意的点
- size返回的无符号的整数,所以为了防止出错,直接转为int
写在最后
今天跟昨天一比差距也太大了点。。。。