leetcode面试经典算法题——2

链接:https://leetcode.cn/studyplan/top-interview-150/

20. 有效的括号

给定一个只包括 '(',')','{','}','','' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()\[\]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

Python代码

python 复制代码
class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        # 利用栈先进后出的特点,遇见左符号就进栈,遇见右符号则判断栈顶的符号是否与之匹配。
        len_s = len(s)
        if len_s < 2:
            return False
        for item in s:
            stack_len = len(stack)
            if item == "(" or item == "[" or item == "{":
                stack.append(item)
            if item == ")":
                if stack_len != 0 and stack[-1] == "(":
                    stack.pop()
                else:
                    return False
            elif item == "]":
                if stack_len != 0 and stack[-1] == "[":
                    stack.pop()
                else:
                    return False
            elif item == "}":
                if stack_len != 0 and stack[-1] == "{":
                    stack.pop()
                else:
                    return False
            
            i += 1
        # 操作之后,栈空则全部符合,否则无效
        if len(stack) == 0:
            return True
        else:
            return False
            
                
        
if __name__ == '__main__':
    s = Solution()
    a = "){}"
    print(s.isValid(a))

C++代码

cpp 复制代码
#include <iostream>
#include <stack>
using namespace std;

class Solution {
public:
    bool isValid(string s) {
    // 创建字符栈
        stack<char> myStack; 
        int len_s = s.size();
        if (len_s < 2) return false;
        int i;
        for (i = 0; i < len_s; i++){
            int stack_len = myStack.size(); // 获得栈大小
            if (s[i] == '(' || s[i] == '[' || s[i] == '{')
                    myStack.push(s[i]);
            else if (s[i] == ')') {
                if (stack_len != 0 && myStack.top() == '(') myStack.pop();
                else return false;
            }
            else if (s[i] == ']') {
                if (stack_len != 0 && myStack.top() == '[') myStack.pop();
                else return false;
            }
            else if (s[i] == '}') {
                if (stack_len != 0 && myStack.top() == '{') myStack.pop();
                else return false;
            }
        }
        return myStack.empty(); // 检查栈是否为空
    }
};

int main() {
    Solution s;
    string a = "())";
    cout << s.isValid(a) << endl;
    return 0;
}

141. 环形链表

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

输入:head = 3,2,0,-4, pos = 1

输出:true

解释:链表中有一个环,其尾部连接到第二个节点。

输入:head = 1,2, pos = 0

输出:true

解释:链表中有一个环,其尾部连接到第一个节点。

输入:head = 1, pos = -1

输出:false

解释:链表中没有环。

提示:

  • 链表中节点的数目范围是 0, 10\^4
  • -10^5 <= Node.val <= 10^5
  • pos 为 -1 或者链表中的一个 有效索引 。

Python代码

python 复制代码
# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        # 使用快慢指针,快指针每次走两个结点,慢指针每次走一个结点,当快指针遇上慢指针则存在环
        fast = head
        slow = head
        while fast:
            if fast.next:
                fast = fast.next.next
            else:
                break
            slow = slow.next
            if fast == slow:
                return True
            
        return False
def CreateListNode(l1):
    head = ListNode(l1[0])
    node = head
    for i in range(1, len(l1)):
        new_head = ListNode(l1[i])
        node.next = new_head
        node = new_head
    return head

21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

输入:l1 = 1,2,4, l2 = 1,3,4

输出:1,1,2,3,4,4

示例 2:

输入:l1 = \[\], l2 = \[\]

输出:\[\]
示例 3:

输入:l1 = \[\], l2 = 0

输出:0

提示:

相关推荐
海绵宝宝转agent4 小时前
JUC高频面试八股总结个人开源
面试·职场和发展
Nil2085 小时前
leetcode 118杨辉三角
算法·leetcode·职场和发展
wanderist.7 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.7 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_307779137 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂8 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年8 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO98 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude8 小时前
c语言:递归
java·c语言·算法
edtoplort9 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法