数据结构与算法例题(3)——队列和栈

简介: 队列一个例题和栈的两个例题

image-20221003092027737

# 题目比较难理解,大概意思就是求在[t-3000,t]之间的请求数,因此可以将小于t-3000时间内的请求删除,也就是popleft(),这样得到的就是最后的答案。
class RecentCounter:
    def __init__(self):
        self.q=deque()
    def ping(self, t: int) -> int:
        self.q.append(t)
        while self.q[0]<t-3000:
            self.q.popleft()
        return len(self.q)

image-20221003102225767

class Solution:
    def isValid(self, s: str) -> bool:
        #判断是否一一对应 该方法对于{[]}这种情况无法通过
        # s=list(s)
        # if len(s)%2 != 0:
        #     return False
        # else:
        #     while len(s)>0:
        #         temp1=s.pop()#取出最后一个元素
        #         temp2=s.pop()
        #         if temp1==')' and temp2=='(':
        #             continue
        #         elif temp1=='}' and temp2=='{':                
        #             continue
        #         elif temp1==']' and temp2=='[':
        #             continue
        #         else:
        #             return False
        #             break
        #     return True

        if len(s)%2!=0:
            return False
        
        pairs={
            ")":"(",
            "]":"[",
            "}":"{"
        }
        stack=list()
        for ch in s:
            if ch in pairs:#遍历字典中的键
                if not stack or stack[-1]!=pairs[ch]:
                    return False
                stack.pop()
            else:
                stack.append(ch)
        return not stack
#解题思路:首先判断有多少个括号,如果有奇数个括号直接返回false,
#利用栈的思路解决,将所有的左边符号都压入栈,然后如果找到与之相对应的右边符号就出栈,最后如果都符合栈为空,否则栈中有元素


#这种方法清晰易懂
class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)%2!=0:
            return False
        stack=[]
        for i in s:
            if i=="(" or i=="[" or i=="{":
                stack.append(i)
            else:
                if len(stack)==0:
                    return False
                else:
                    temp=stack.pop()
                    if i==")":
                        if temp!='(':
                            return False
                    elif i=="]":
                        if temp!='[':
                            return False   
                    elif i=="}":
                        if temp!='{':
                            return False     
        if len(stack)==0:
            return True
        else:
            return False                

image-20221003142309208

# 下面是我的代码,也就是暴力解法
class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        #我的代码
        for i in range(len(nums1)):
            for j in range(len(nums2)):
                if nums1[i]==nums2[j]:
                    if len(nums2)-1-j==0:
                        temp=-1
                    else:
                        for t in range(j+1,len(nums2)):
                            if nums2[t]>nums1[i]:
                                temp=nums2[t]
                                # nums1[i]=temp
                                break
                            else:
                                temp=-1
            nums1[i]=temp             
        return nums1
#时间复杂度O(MN)
相关文章
|
17天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
91 9
|
7天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
16 1
|
10天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
13天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
15天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
43 4
|
19天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
数据结构(栈与列队)
数据结构(栈与列队)
17 1
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
26 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
1月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
20 0
数据结构与算法学习十四:常用排序算法总结和对比