秋招突击——6/18——新作{有效的括号、有序链表的合并}

48 篇文章 1 订阅

引言

  • 今天真的是罪孽深重,睡到了十点钟起床,也没有去背八股,上午也没有复习题目,下午因为个人私事忙到了差不多三点钟,开始整论文。从实验室回来,又看上了一部电影《烈日灼心》,跳着看完了,没有刷今天的新题。不行呀,进度太慢了。今天好赖得刷一个题,简单也行。

新作

有效的括号

个人实现
  • 这个括号匹配就是典型的出栈入栈操作,总共一下两种情况
    • 遍历完整个数组,栈还不为空,就出现错误
    • 如果栈顶的元素,和当前不入栈的元素不匹配,那就是错误。
  • 主要涉及两种逻辑
    • 左括号都是入栈。
    • 右括号都是出栈。
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;
    }
};

在这里插入图片描述

参考代码

在这里插入图片描述

  • 这个思路真的是绝了,如果两个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();
    }
};

合并两个有序链表

在这里插入图片描述

思路分析
  • 双指针进行遍历比较大小即可
#include <iostream>

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(){

}

在这里插入图片描述

总结

  • 昨晚做腾讯的测试做到半夜两点,真多,今天继续吧。
  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值