首页 > 其他分享 >LeetCode刷题-栈

LeetCode刷题-栈

时间:2024-09-06 16:26:57浏览次数:4  
标签:return 元素 nums1 LeetCode def stack nums2 刷题

一:栈

1、栈的特性:栈和队列不一样;队列是先进先出;而队列是先进后出;后进后出!

2、栈的常见操作

def create_stack():
    stack=[]#在python中;通常用列表实现栈的操作
    return stack
def push(stack,data):
    stack.append(data)#将data压入栈中
def peek(stack):
    return stack[-1]#返回栈顶元素
def pop(stack):
    return stack.pop()#弹出栈顶元素
def is_empty(stack):
    return len(stack)==0#判断栈是否为空
def size(stack):
    return len(stack)#返回栈的大小
def print_stack(stack):
    for i in stack:
        print(i,end=' ')#打印栈中的元素

二:刷题

题目20有效的括号

#方法1:使用计数实现
'''def func(s):
    count=0
    for i in s:
        if i=='(':
            count+=1
        elif i==')':
            count-=1
        if count<0:
            return False
    return True
s="()[]{}"
print(func(s)) # True'''
#方法2:使用栈实现
def func(s):
    stack = []
    for char in s:
        if char == '(':
            stack.append(char)
        elif char == ')':
            if not stack or stack.pop() != '(':#只要条件成立一个就返回False
                return False
    return not stack#判断列表是否为空;如果为空的话返回TRUE,否则返回FALSE
s="()[]{}"
print(func(s)) # True
#方法3:使用消除法实现
'''def func(s):
    while '{}' in s or '()' in s or '[]' in s:
        s=s.replace('{}','')
        s=s.replace('()','')
        s=s.replace('[]','')
    return s==''#检查最后的字符串是不是为空;如果是空的返回True,否则返回False
#就是一个简答的灯饰
s="()[]{}"
print(func(s)) # True'''

题目496下一个更大的元素

#暴力解法
def next_greater_element(nums1, nums2):
    # 初始化结果数组
    ans = []

    # 遍历 nums1 中的每一个元素
    for x in nums1:
        # 在 nums2 中找到 x 的位置
        found = False
        for i in range(len(nums2)):
            if nums2[i] == x:
                found = True
            # 如果已经找到了 x,在其右侧寻找第一个更大的元素
            if found and nums2[i] > x:
                ans.append(nums2[i])
                break
        else:
            # 如果没有找到比 x 更大的元素,记录 -1
            ans.append(-1)

    return ans
#单调栈
def next_greater_element(nums1, nums2):
    # 创建一个字典来存储每个元素的下一个更大元素
    next_greater = {}
    # 创建一个栈用于存放还没有找到下一个更大元素的元素
    stack = []

    # 遍历 nums2
    for num in nums2:
        # 如果栈顶元素比当前元素小,则找到栈顶元素的下一个更大元素
        while stack and stack[-1] < num:
            next_greater[stack.pop()] = num
        # 将当前元素压入栈中
        stack.append(num)

    # 栈中剩余的元素都是没有下一个更大元素的,设置为 -1
    while stack:
        next_greater[stack.pop()] = -1

    # 对 nums1 中的每个元素,返回它的下一个更大元素
    return [next_greater[num] for num in nums1]

标签:return,元素,nums1,LeetCode,def,stack,nums2,刷题
From: https://www.cnblogs.com/gsupl/p/18400487

相关文章

  • 算法练习小技巧之有序集合--套路详细解析带例题(leetcode)
    前言:    本文详细讲解Python中的有序集合SortedList和C++中的有序集合multiset的用法,配合leetcode的例题来展示实际的用处。(本人水平不够,还无法讲解有序集合的实现方法,只会用)    觉得有帮助或者写的不错可以点个赞,后面也有几道我找出来的题目可以用这个方......
  • 2024.9.6 leetcode 70 爬楼梯 (哈希表/动态规划)
    题面70.爬楼梯-力扣(LeetCode)题解:极其经典的一道动态规划,比如要跳到10楼有f(10)种方法,可以分为1、先跳到9楼再往上跳1楼2、先跳到8楼再往上跳2楼,所以f(10)=f(8)+f(9),昨天复习了哈希表,所以用哈希练习一下。classSolution{public:intclimbStairs(intn){uno......
  • Leetcode面试经典150题-210.课程表II
    这个题是图的问题,因为图的拓扑排序在实际应用中有非常多的用途图,所以最近考的越来越多解法都在代码里,不懂就留言或者私信看这个题之前一定要好好看看207题我写的题解,也许207看懂了的话,210只是一个coding问题了Leetcode面试经典150题-207.课程表-CSDN博客一定要看!一定要看!......
  • LeetCode Hot100刷题记录-21. 合并两个有序链表
    题目描述:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。需要知道的pre-knowledge:list1和list2起初可直接代表两个链表的头节点,无需用另外的变量比如current来表示头节点。思路:准备一个虚拟节点,指向合并完成新链表的h......
  • LeetCode Hot100刷题记录-206. 反转链表
    206.反转链表题目描述:给你单链表的头节点head,请你反转链表,并返回反转后的链表。这道题要用到两个指针,一个current指向当前节点,另一个prev指向当前节点的上一个节点。首先让current指向头节点head,prev指向head的前一个也就是null,这里要用next变量来暂时存储current的下一个......
  • 0906 shell编程与基础算法(leetCode)
    哈希表的基本知识:哈希表(HashTable)又称散列表,是除顺序存储结构、链式存储结构和索引表存储结构之外的又一种存储结构。哈希碰撞:解决办法开放定址法:是一类以发生冲突的哈希地址为自变量,通过某种哈希冲突函数得到一个新的空闲的哈希地址的方法。(1)线性探测法从发生冲突的地......
  • 2024.9.4 leetcode 169 多数元素 (哈希表)
    题面 169.多数元素-力扣(LeetCode)题解:复习(自学)了一下哈希表,unordered_map<int,int>umap定义一个表umap.find(nums[i])!=umap.end()判断是否存在umap.insert({nums[i],1})插入umap.erase(nums[i])清除C++容器类<unordered_map>|菜鸟教程(runoob.com)class......
  • leetcode刷题day9|字符串部分(151.翻转字符串里的单词、卡码网:55.右旋转字符串)
    前言:字符串章节的第二部分,复习第一部分的知识加提升。151.翻转字符串里的单词链接:https://leetcode.cn/problems/reverse-words-in-a-string/前言:不使用Java内部方法实现思路:先去除字符串中的空格;将整个字符串反转;将单词再一次反转。代码如下:classSolution{pub......
  • leetcode刷题day8|字符串部分(344.反转字符串、541. 反转字符串II)
    前言:字符串部分还是比较简单的344.反转字符串链接:https://leetcode.cn/problems/reverse-string/description/思路:这个比较简单,因为字符串也是数组类型的,用两个指针进行交换即可。代码如下:classSolution{publicvoidreverseString(char[]s){inti=0......
  • 2024.9.5 leetcode 3174 清除数字(字符串)
    题面3174.清除数字-力扣(LeetCode)题解:今天的每日一题比较简单,思路是遍历字符串,遇到第一个数字x的时候,把数字x和前面的字母y删除,也就是删除yx。1、为什么前面一定是字母,因为遇到的是第一个数字,前面不可能再有数字。2、如何实现删除yx,重新定义一个字符串,每一次遍历将y前面的字......