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

提示:

相关推荐
xiangyun614 分钟前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
302wanger2 小时前
推荐下我的两个AI信息源
算法
索尔~古德曼2 小时前
CF——错题的集合
算法
SL_staff2 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
陌シ未央ゞ2 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法
renhongxia12 小时前
数字孪生不止在工厂:能源、医疗与农业
人工智能·深度学习·算法·机器学习·数字孪生
Navigator_Z2 小时前
LeetCode //C - 1250. Check If It Is a Good Array
c语言·算法·leetcode
DeepAgent2 小时前
AI Agent 面试篇(02):面试路线总览——每一关考什么、题什么样、要准备什么
面试·agent
颜挺锐4 小时前
如何轻松通过性能测试面试之第十一篇:如何判断应用的最大处理能力
面试·职场和发展
DeepAgent4 小时前
AI Agent 面试篇(01):AI 岗位面试到底怎么走——从网申到 Offer 的完整流程
人工智能·面试·职场和发展