数据结构与算法例题(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)
相关文章
|
8天前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
29 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
11天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
16 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
11天前
初步认识栈和队列
初步认识栈和队列
35 10
|
5天前
数据结构(栈与列队)
数据结构(栈与列队)
11 1
|
10天前
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
37 1
|
6天前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
9 0
|
11天前
探索顺序结构:栈的实现方式
探索顺序结构:栈的实现方式
|
11天前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
12 0
|
17天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
2天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。