代码随想录 Day 11 | 【第五章 栈与队列】150.逆波兰表达式求值、239.滑动窗口最大值、347.前 K 个高频元素、总结

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码) 本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。 阅读详情

一、150.逆波兰表达式求值

本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题

题目链接/文章讲解/视频讲解:代码随想录

1. 看完代码随想录的想法

(1)首先需要充分理解什么是逆波兰表达式,相当于树中的后缀表达式,与平时使用的中序表达式并不相同。

        定义一个初始化的空栈,然后去遍历输入的逆波兰表达式,遇到数字就向栈中添加数字元素,遇到运算符就取出栈顶的两个数字进行运算,再存放进栈中。直到最后全部遍历完成,输出最后结果。

(2)首先,从operator引入add, sub, mul运算;然后由于题目中要求两个整数之间的除法总是向零截断,不包含除0运算,所以额外去定义一个除法函数,防止除数为0,处理异常值。

(3)其次,定义一个空栈stack,然后去遍历输入的字符串数组,如果字符不是加减乘除中任意一个,那么说明是数字,则用int强制将char转化为整数,然后添加进栈中;如果遍历到的字符是运算符,则依次取出两个,然后将运算后的数添加进栈中;

(4)全部遍历完成后返回栈顶元素。

from operator import mul, add, sub

def div(x, y):
    if x * y > 0:
        return int(x/y)
    else:
        return -(abs(x) // abs(y))

class Solution(object):
    op_map = {'+': add, '-': sub, '*': mul, '/': div}

    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        for i in tokens:
            if i not in {'+', '-', '*', '/'}:
                stack.append(int(i))
            else:
                op2 = stack.pop()
                op1 = stack.pop()
                stack.append(self.op_map[i](op1,op2))
        return stack.pop()

2. 实现过程中遇到的困难及解决

(1)如何判断循环到的元素是数字:如果不在运算符字典中,那么就是数字;或者使用isdigit()函数进行判断。

(2)如何弹出栈顶两个元素进行运算:直接pop()一次弹出,并且将运算后的数再写入栈中,便于下次运算;要注意运算符是调用字典,用key取value运算函数。

(3)如何进行异常处理:对分母为0以及负数进行特别处理,通过取整、取绝对值的方式。

(4)实现过程中debug:1)空格没对齐报错;2)op1、op2的顺序需要特别注意,op1是第二个取出的,op2是栈顶元素,并且要按照先后放入栈的顺序进行运算。

二、239.滑动窗口最大值

之前讲的都是栈的应用,这次该是队列的应用了。

本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。

题目链接/文章讲解/视频讲解:代码随想录

1. 看完代码随想录的想法

(1)整体思路:按照给定k的大小去圈定滑动窗口,每次返回滑动窗口中的最大值,并将其添加进入结果集中;所以自定义一个队列,维护队列出口元素为滑动窗口最大值,只要新添加进来的元素比队列出口的元素大,那么把队列出口的元素全部弹出,然后将新元素添加进入队列入口,并且返回队列出口元素,将其放进结果集中,表示这是这一个滑动窗口的最大值。

(2)首先,自定义一个能完成上述操作的新类,然后最后在给定的主类中调用自定义类方法。

(3)自定义新类:首先引入单调队列,定义一个初始化队列方法;然后定义pop()函数,弹出之前必须判断队列是否为空,不为空才可以弹出,同时需要判断当前要弹出的数值是否是队列出口元素,必须在队列出口才可以弹出元素。

        接下来定义push()函数,同样判断队列是否为空,并且如果需要添加的元素大于入口处的元素,那么就将比需添加元素的数值小的元素全部弹出,直到需要添加的数值小于等于队列入口元素,这样才能保持队列的元素单调从大到小。

        最后定义获取滑动窗口最大值的函数front(),直接返回队列前端即可,因为该队列是由大到小排序的。

(4)主函数:首先定义一个新队列,调用自定义类方法,然后定义一个空数组,用于存放滑动窗口的最大元素。接下来,将给定的前k个元素调用push函数放进队列,最后调用front函数,将这组滑动窗口的最大值存放进入数组。然后继续向后遍历给定数组,从第k个一直遍历到数组末尾,然后调用pop函数移除最前面元素,在队列末尾添加元素,同时记录滑动窗口最大值。最后返回result。

from collections import deque


class MyQueue: #单调队列(从大到小
    def __init__(self):
        self.queue = deque() #这里需要使用deque实现单调队列,直接使用list会超时
    
    #每次弹出的时候,比较当前要弹出的数值是否等于队列出口元素的数值,如果相等则弹出。
    #同时pop之前判断队列当前是否为空。
    def pop(self, value):
        if self.queue and value == self.queue[0]:
            self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()
            
    #如果push的数值大于入口元素的数值,那么就将队列后端的数值弹出,直到push的数值小于等于队列入口元素的数值为止。
    #这样就保持了队列里的数值是单调从大到小的了。
    def push(self, value):
        while self.queue and value > self.queue[-1]:
            self.queue.pop()
        self.queue.append(value)
        
    #查询当前队列里的最大值 直接返回队列前端也就是front就可以了。
    def front(self):
        return self.queue[0]
    
class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        que = MyQueue()
        result = []
        for i in range(k): #先将前k的元素放进队列
            que.push(nums[i])
        result.append(que.front()) #result 记录前k的元素的最大值
        for i in range(k, len(nums)):
            que.pop(nums[i - k]) #滑动窗口移除最前面元素
            que.push(nums[i]) #滑动窗口前加入最后面的元素
            result.append(que.front()) #记录对应的最大值
        return result

三、347.前 K 个高频元素

大/小顶堆的应用, 在C++中就是优先级队列

本题是 大数据中取前k值 的经典思路,了解想法之后,不算难。

题目链接/文章讲解/视频讲解:代码随想录

1. 看完代码随想录的想法

(1)整体思路:首先构建map,用于统计数组中每个元素出现的频率,key-value形式;因为需要统计的是高频元素,所以每次弹出的元素不可以是最大的,因此使用小顶堆。

(2)定义一个空字典defaultdict(int),用于统计输入的数组中每个元素及其出现的频率;

        然后定义一个新字典,用于将上述字典的key和value交换,然后将这个字典的出现频率转换为数组形式,并对其进行排序,也就是将频率由小到大进行排序;

        接下来定义一个result空数组用于存放结果集,以及一个计数器cnt,初始化为0;然后对输入的数组进行遍历,通过key[-1]找到字典中频率最高的元素,将其存入结果集,同时将计数器+1,同时删除较小元素,一直到满足前k个高频元素全部存入结果集。

        最后返回结果集即可。

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        value_dict = defaultdict(int)
        for i in nums:
            value_dict[i] += 1
        index_dict = defaultdict(list)
        for key in value_dict:
            index_dict[value_dict[key]].append(key)
        key = list(index_dict.keys())
        key.sort()
        result = []
        cnt = 0
        while key and cnt != k:
            result += index_dict[key[-1]]
            cnt += len(index_dict[key[-1]])
            key.pop()
        return result

 

四、总结

在栈与队列系列中,强调栈与队列的基础,也是很多同学容易忽视的点。

使用抽象程度越高的语言,越容易忽视其底层实现,而C++相对来说是比较接近底层的语言。

用栈实现队列,用队列实现栈来掌握的栈与队列的基本操作。

接着,通过括号匹配问题、字符串去重问题、逆波兰表达式问题来系统讲解了栈在系统中的应用,以及使用技巧。

通过求滑动窗口最大值,以及前K个高频元素介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。

深度学习工具包 DeepLearningToolbox 深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge") 立即下载

相关推荐

双层优化入门(1)—基本原理与求解方法(附matlab代码)

双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。

配电网和matlab的博客 5万+

代码随想录算法训练营day11(python版)|第五章 栈与队列part02| 150. 逆波兰表达式求值 239. 滑动窗口最大值347.前 K 个高频元素

150. 逆波兰表达式求值本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题。

qq_43752779的博客 529

Cisco思科 电子科技大学计算机网络 SRWE 期末技能考试 (PTSA)

电子科技大学2024春_SRWE_计算机网络系统 SRWE 期末技能考试 (PTSA)

2301_76745065的博客 5094

代码随想录day11||150,逆波兰表达式求值 239,滑动窗口最大值 347,前k个高频元素

*当遇到的是符号时,就以此符号来进行前两个数的运算,不是符号,就放入栈中,用运算完的结果替换掉使用该符号的数(及时弹出运算过的数字)*/单调队列:单调递减或者单调递增的队列,因为这样,我们每往下访问一个窗口,如果是单调递减的队列,那么,最大值一定是front()。这题用小顶堆实现,小顶堆会自动排序,但我们此时的小顶堆的排序需要自己定义,让这个顶堆的排序是根据数字出现的次数来排序。:这是自定义的比较器类型,用于指定优先队列中元素的排序方式。用队列实现,要用自定义的队列类型,实现单调队列。

2301_80639580的博客 2059

DoubletFinder实战:如何优化参数提升scRNA-seq双细胞识别准确率?

本文深入探讨了如何通过优化DoubletFinder参数提升scRNA-seq双细胞识别准确率。详细解析了pK和nExp参数的影响机制,提供了系统化的参数优化流程和多样本整合策略,并结合真实数据集演示了验证方法与高级应用场景,帮助研究人员获得更可靠的分析结果。

weixin_28523493的博客 339

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 517

代码随想录算法训练营Day11 | 150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素

训练营第11天:150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素

jiabao0520的博客 1347

BVH2SMPL 实战笔记

BVH2SMPL 实战笔记

jacke121的专栏 843

代码随想录刷题day11丨150. 逆波兰表达式求值,239. 滑动窗口最大值 ,347.前 K 个高频元素,栈与队列总结

栈栈顶(Top):线性表允许进行插入删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。方法功能Stack()构造一个空的栈将e入栈,并返回eE pop()将栈顶元素出栈并返回E peek()获取栈顶元素int size()获取栈中有效元素个数检测栈是否为空// 压栈操作 stack . push("Java");// 弹栈操作 String topLanguage = stack . pop();

m0_75195038的博客 984

ESP32-S3驱动OV3660摄像头原理图设计,已量产

本文重点拆四条主线:多来源输入电源如何收敛到 3V3,摄像头三路供电如何拆分,ESP32-S3 如何接住 DVP 数据流与外部存储,以及音频/补光/传感外围怎样挂到主控边上。至于最终图像帧率、算法策略和软件时序,当前原理图未体现。

不脱发的程序猿 982

把 SAP Activate 六个阶段看透:从项目落地到 SAP BTP 扩展与 AI 运营的一体化实践

摘要: SAP Activate 方法论常被误解为简单的项目阶段划分,实则是一套将业务目标、标准流程、系统配置和持续运营串联的实施控制体系。其六个阶段(Discover至Run)构成价值递进的实施通道,核心交付集中在Prepare到Deploy阶段。Discover阶段通过DDA评估确立项目方向与范围,Prepare阶段聚焦可执行性准备,Explore阶段采用Fit-to-Standard工作坊进行需求分层,Realize阶段基于前期决策进行配置与扩展开发。该方法论强调标准化优先,差异化需求通过SAP BT

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2332

Day11补代码随想录 150.逆波兰表达式求值 239.滑动窗口最大值 347.前 K 个高频元素

声明栈的数据类型为Integer,ArrayDeque<Integer>因为运算符没有进入到栈,字符串循环遍历会遇到总结JAVA栈不同类型的常用操作低级错误push返回的是void,不能直接return比较字符在 Java 中, ==比较的是对象的内存地址,对于字符串的内容比较,应使用 equals方法。注意区分,num1和nums2逻辑 转换为字符串valueOf,deque.push(Integer.valueOf(str));

爱因斯小柚的博客 947

为什么devc++编译项目会失败?提示gcc无法正常启动...

根据你的描述,编译能正常进行时,只打开源文件并没有问题,问题主要出现在创建项目后编译失败,这通常与 Makefile 配置、环境变量、编译器路径设置等因素有关。你可以检查 Makefile 配置,验证 DevC++ 的编译器环境设置,或者尝试清理并重新配置项目。如果问题仍然存在,可以尝试重装 DevC++ 或重新配置工具链。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1376

刷题计划 day11 栈与队列下【逆波兰表达式求值】【滑动窗口最大值】【前 K 个高频元素】

⚡刷题计划day11 栈与队列继续,可以点个免费的赞哦~【逆波兰表达式求值】【滑动窗口最大值】【前 K 个高频元素】单调队列,优先队列

weixin_72499901的博客 1295

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

DAY11||150.逆波兰表达式求值 |239.滑动窗口最大值 |347.前k个高频数字

题目:150. 逆波兰表达式求值 - 力扣(LeetCode)其实就是后缀表达式,逆波兰表达式主要有以下两个优点:去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。动图理解: 一些犯错的点 239.滑动窗口最大值 题目:239. 滑动窗口最大值 - 力扣(LeetCode) 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。单调

2301_79865280的博客 1333

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码随想录Day11 | 栈与队列 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347. 前 K 个高频元素

class MyQueue: #单调队列(从大到小self.queue = deque() #这里需要使用deque实现单调队列,直接使用list会超时#每次弹出的时候,比较当前要弹出的数值是否等于队列出口元素的数值,如果相等则弹出。#同时pop之前判断队列当前是否为空。self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()

m0_56231308的博客 698

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

day11| 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素

/自定义数组//弹出元素时,比较当前要弹出的数值是否等于队列出口的数值,如果相等则弹出//同时判断队列当前是否为空if (!//添加元素时,如果要添加的元素大于入口处的元素,就将入口元素弹出//保证队列元素单调递减//比如此时队列元素3,1,2将要入队,比1大,所以1弹出,此时队列:3,2while (!//队列队顶元素始终为最大值//存放结果元素的数组//自定义队列//先将前k的元素放入队列i < k;

m0_65709641的博客 1108

Studying-代码随想录训练营day12| 150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素、总结

150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素、总结

yachihaoteng的博客 1223

代码随想录Day11 150. 逆波兰表达式求值,239. 滑动窗口最大值,347.前 K 个高频元素,栈与队列总结篇。

代码随想录Day11 150. 逆波兰表达式求值,239. 滑动窗口最大值,347.前 K 个高频元素,栈与队列总结篇。

get_money_的博客 905

DAY11|栈与队列Part02|LeetCode: 150. 逆波兰表达式求值 、 239. 滑动窗口最大值、 347.前 K 个高频元素

如果用大顶堆,也就是当前频率最大的元素在堆顶,那么我们想要push进一个元素,我们就必须pop掉一个元素,我们应该是想pop掉当前k个元素中,频率最小的那个元素。对于优先级队列来讲,可以将滑动窗口内部的元素进行排序,但是排序后我们失去了原来的顺序,这样每次弹出的是最大值,而无法移除其他的元素,因此应该考虑使用单调队列。,这样就可以保证队列中的数值从大到小,并且如果队列中的数值都小于push的数值,可以证明新push的值就是当前滑动窗口的最大值,即可将当前值push进队列,并将之前队列中的数值pop。

ning1437589742的博客 722

24暑假算法刷题 | Day11 | LeetCode 150. 逆波兰表达式求值,239. 滑动窗口最大值,347. 前K个高频元素

day11打卡:栈和队列的应用

weixin_54468359的博客 1173

代码随想录算法训练营第 11 天 | LeetCode150. 逆波兰表达式求值 LeetCode239. 滑动窗口最大值 LeetCode347.前 K 个高频元素

本章重点1、用队列实现栈2、用站实现队列3、栈的应用:逆波兰式、有效括号4、队列应用:滑动窗口最大值5、优先队列:本质是大顶堆和小顶堆,前k个高频元素。

2301_79647020的博客 1539

代码随想录day11 | leetcode150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素 栈与队列总结

括号匹配是使用栈解决的经典问题。建议要写代码之前要分析好有哪几种不匹配的情况,如果不动手之前分析好,写出的代码也会有很多问题。先来分析一下 这里有三种不匹配的情况,第一种情况,字符串里左方向的括号多余了,所以不匹配。第二种情况,括号没有多余,但是括号的类型没有匹配上。第三种情况,字符串里右方向的括号多余了,所以不匹配。这里还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!

2302_81139517的博客 1067

代码随想录算法训练营Day12 | 150. 逆波兰表达式求值 | 239. 滑动窗口最大值 | 347. 前 K 个高频元素

根据 逆波兰表示法,求表达式的值。有效的运算符包括 + , - , * , /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

wonderlandlja的博客 1430

代码随想录训练营Day11 | 150. 逆波兰表达式求值 | 239. 滑动窗口最大值 | 347.前 K 个高频元素

这是使用单调队列的经典题目,此时我们需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。队列里的元素一定是要排序的,而且要最大值放在出队口,那么已经排序之后的队列 怎么能把窗口要移除的元素(这个元素可不一定是最大值)弹出呢。的滑动窗口从数组的最左侧移动到数组的最右侧。

m0_68965961的博客 1141

代码随想录day11|150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素

了解栈与队列的内部实现机制1.C++中stack,queue 是容器么?我们使用的stack,queue是属于那个版本的STL?我们使用的STL中stack,queue是如何实现的?stack,queue 提供迭代器来遍历空间么?栈里面的元素在内存中是连续分布的么?陷阱1:栈(std::stack)是一个容器适配器,它提供了后进先出(LIFO)的数据结构接口。栈本身并不存储元素,而是使用一个底层容器来存储元素。这个底层容器可以是任何序列容器,比如std::deque或std::list。

LuckyYH__的博客 863
上一篇: 代码随想录 Day 10 | 【第五章 栈与队列】 232.用栈实现队列 、225. 用队列实现栈 、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项
下一篇: 代码随想录 Day 13 | 【第六章 二叉树】理论基础、递归遍历、迭代遍历、层序遍历
Accept17
博客等级 码龄4年 479粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值