引言
- 今天真的是罪孽深重,睡到了十点钟起床,也没有去背八股,上午也没有复习题目,下午因为个人私事忙到了差不多三点钟,开始整论文。从实验室回来,又看上了一部电影《烈日灼心》,跳着看完了,没有刷今天的新题。不行呀,进度太慢了。今天好赖得刷一个题,简单也行。
新作
有效的括号
个人实现
- 这个括号匹配就是典型的出栈入栈操作,总共一下两种情况
- 遍历完整个数组,栈还不为空,就出现错误
- 如果栈顶的元素,和当前不入栈的元素不匹配,那就是错误。
- 主要涉及两种逻辑
class Solution {
public:
bool isValid(string s) {
stack<char> t;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{' ){
t.push(s[i]);
}else{
if (t.empty()) return false;
else{
if (s[i] == ')') {
if (t.top() == '(') t.pop();
else return false;
}else if (s[i] == ']') {
if (t.top() == '[') t.pop();
else return false;
}else if (s[i] == '}') {
if (t.top() == '{') t.pop();
else return false;
}else
return false;
}
}
}
if (!t.empty()) return false;
else return true;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/de3a7799505e4135977ba804b23726fa.png)
参考代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/503a305f3bd54e79a4b46c34f6dec1c3.png)
- 这个思路真的是绝了,如果两个ASCII码值,绝对值小于等于2,就一定是匹配的。牛逼
class Solution {
public:
bool isValid(string s) {
stack<char> t;
for (auto c :s) {
if (c == '('||c == '[' ||c == '{') t.push(c);
else{
if (!t.empty() && abs(t.top() - c)<=2 ) t.pop();
else return false;
}
}
return t.empty();
}
};
合并两个有序链表
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c8ddd927ac164c19a0a06224f6cfc195.png)
思路分析
using namespace std;
struct ListNode{
int val;
ListNode* next;
ListNode(int x,ListNode* y):val(x),next(y){};
ListNode(int x):val(x),next(nullptr){};
ListNode():val(-1),next(nullptr){};
};
ListNode* mergeTwoLists(ListNode* list1,ListNode* list2){
ListNode* dummy = new ListNode();
ListNode* temp = dummy;
while(list1 && list2){
if (list1->val < list2->val){
temp->next = list1;
list1 = list1->next;
}else{
temp->next = list2;
list2 = list2->next;
}
temp = temp->next;
}
if (list1) temp->next = list1;
if (list2) temp->next = list2;
return dummy->next;
}
int main(){
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cf88dade58664313814125d50e68e204.png)
总结