2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回
2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,
只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,
返回 true;否则,返回 false 。
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]。
输出:true。
来自美团。
来自左程云。
答案2023-10-14:
大体过程如下:
1.初始化一个栈stack和索引指针i、j,分别指向pushed和popped的起始位置。
2.遍历pushed数组,将当前元素pushed[i]入栈,同时i自增1。
3.在入栈后,检查栈顶元素是否与popped[j]相等。若相等,则表示栈顶元素需要出栈,因此将栈顶元素出栈,同时j自增1。
4.重复步骤2和步骤3,直到遍历完pushed数组。
5.最后,判断栈是否为空。若栈为空,则返回true;否则,返回false。
时间复杂度分析:遍历pushed数组的时间复杂度为O(n),其中n为数组的长度。在每次遍历中,判断栈顶元素是否需要出栈的时间复杂度为O(1)。因此,总的时间复杂度为O(n)。
空间复杂度分析:仅使用了常数级别的额外空间,因此额外空间复杂度为O(1)。
go完整代码如下:
package main
import "fmt"
func validateStackSequences(pushed []int, popped []int) bool {
n := len(pushed)
size := 0
for i, j := 0, 0; i < n; i++ {
pushed[size] = pushed[i]
size++
for size > 0 && j < n && pushed[size-1] == popped[j] {
size--
j++
}
}
return size == 0
}
func main() {
pushed := []int{1, 2, 3, 4, 5}
popped := []int{4, 5, 3, 2, 1}
result := validateStackSequences(pushed, popped)
fmt.Println(result)
}

rust完整代码如下:
fn validate_stack_sequences(pushed: Vec<i32>, popped: Vec<i32>) -> bool {
let n = pushed.len() as i32;
let mut size = 0;
let mut pushed = pushed; // Make pushed mutable
let mut j = 0;
for i in 0..n {
pushed[size as usize] = pushed[i as usize];
size += 1;
while size > 0 && j < n && pushed[(size - 1) as usize] == popped[j as usize] {
size -= 1;
j += 1;
}
}
size == 0
}
fn main() {
let pushed = vec![1, 2, 3, 4, 5];
let popped = vec![4, 5, 3, 2, 1];
let result = validate_stack_sequences(pushed, popped);
println!("{}", result);
}

c++完整代码如下:
#include <iostream>
#include <vector>
using namespace std;
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int n = pushed.size();
int size = 0;
for (int i = 0, j = 0; i < n; i++) {
// i : 入栈数组,哪个位置的数要进栈
// j : 出栈数组,对比的位置
pushed[size++] = pushed[i];
while (size > 0 && j < n && pushed[size - 1] == popped[j]) {
size--;
j++;
}
}
return size == 0;
}
int main() {
vector<int> pushed = { 1, 2, 3, 4, 5 };
vector<int> popped = { 4, 5, 3, 2, 1 };
bool result = validateStackSequences(pushed, popped);
cout << boolalpha << result << endl;
return 0;
}

c完整代码如下:
#include <stdio.h>
#include <stdbool.h>
bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize) {
int size = 0;
for (int i = 0, j = 0; i < pushedSize; i++) {
pushed[size++] = pushed[i];
while (size > 0 && j < poppedSize && pushed[size - 1] == popped[j]) {
size--;
j++;
}
}
return size == 0;
}
int main() {
int pushed[] = { 1, 2, 3, 4, 5 };
int popped[] = { 4, 5, 3, 2, 1 };
int pushedSize = sizeof(pushed) / sizeof(pushed[0]);
int poppedSize = sizeof(popped) / sizeof(popped[0]);
bool result = validateStackSequences(pushed, pushedSize, popped, poppedSize);
printf("%s\n", result ? "true" : "false");
return 0;
}

2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回的更多相关文章
- selenium - 弹出框操作
# 6. 弹出框操作 # 6.1 页面弹出框操作# 页面弹出框 是一个html页面的元素,由用户在页面的操作触发弹出# (1)执行触发操作之后,等待弹出框出现之后,# (2)再定位弹出框中的元素并操作 ...
- 如何设置secureCRT的鼠标右键为弹出文本操作菜单功能
secureCRT的鼠标右键功能默认是粘贴的功能,用起来和windows系统的风格不一致, 如果要改为右键为弹出文本操作菜单功能,方便对选择的内容做拷贝编辑操作,可以在 options菜单----&g ...
- CKFinder 弹出窗口操作并设置回调函数
CKFinder 弹出窗口操作并设置回调函数 官方例子参考CKFinderJava-2.4.1/ckfinder/_samples/popup.html 写一个与EXT集成的小例子 Ext.defin ...
- bootstrap 弹出框点击其他区域时弹出框不消失选项设置
默认情况下,bootstrap 弹出框点击其他区域时,弹出框会自动关闭,在很多时候,我们可能会希望达到和原生弹出框一样的效果,避免不小心点击其他区域时弹框自动隐藏,尤其是对于一些复杂的表单,重复填写可 ...
- ArcGIS 添加 MarkerSymbol 弹出“图形符号无法序列化为 JSON”错误
今天在做一个demo,向自定义图层中添加MarkerSymbol的时候,弹出“图形符号无法序列化为 JSON”错误,之前都没有出现过这个问题,我们首先来看一看我是怎样去添加图层,然后向图层中添加Gra ...
- 网页上弹出pop窗口实例,(document).height()与$(window).height()的区别
#dvbg{background-color:#666666; position:absolute; z-index:99; left:0; top:0; display:none; width:10 ...
- jquery的Layer弹出框操作
在layer中,我们要先获取窗口的索引,然后再进行操作. var index = parent.layer.getFrameIndex(window.name); //获取窗口索引 $("# ...
- 关于winform窗体关闭时弹出提示框,选择否时窗体也关闭的问题
在窗体中有FormClosing这个事件,这个事件是在窗体关闭时候运行的.如果要取消某个事件的操作,那么就在该事件中写上e.Cancel=true就能取消该事件,也就是不执行该事件.所以,你要在窗体关 ...
- 页面弹出全屏浮层或遮罩时,禁止底层body滚动
· 解决方法 针对弹出的浮层的 touchmove事件,添加阻止浏览器默认行为. $('.mask-wrapper').on('touchmove', function (event) { // 监听 ...
- easyui-prompt弹出框操作
效果图如下: 代码如下: $(document).ready(function () { //绑定按钮操作 $('#btnMove').click(function () { var ids = ge ...
随机推荐
- DataX入门教学
B站学习网址: https://www.bilibili.com/video/BV1H44y1x76X/?p=5&spm_id_from=pageDriver&vd_source=5f ...
- 代理详解(java代理和CGLIB动态代理)
[代理]大家都知道,特别是在spring中aop.spring中的事务.spring解析注解@Configuration,以及最原始的解析spring.xml的配置,这些都是使用代理来进行实现的, ...
- 行行AI人才直播第4期: 跟随占冰强老师走近《如何定制企业专属AI大模型?》
行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 每个企业定制专属AI大模型的目的都不同,比如某企业希望通过AI技术提升其客户服务和销售效果.该企业面临着庞大的商品数据.用户评 ...
- 【.NET源码解读】深入剖析中间件的设计与实现
.NET本身就是一个基于中间件(middleware)的框架,它通过一系列的中间件组件来处理HTTP请求和响应.在之前的文章<.NET源码解读kestrel服务器及创建HttpContext对象 ...
- 如何不加锁地将数据并发写入Apache Hudi?
最近一位 Hudi 用户询问他们是否可以在不需要任何锁的情况下同时从多个写入端写入单个 Hudi 表. 他们场景是一个不可变的工作负载. 一般来说对于任何多写入端功能,Hudi 建议启用锁定配置. 但 ...
- 一文了解 io.Copy 函数
1. 引言 io.Copy 函数是一个非常好用的函数,能够非常方便得将数据进行拷贝.本文我们将从io.Copy 函数的基本定义出发,讲述其基本使用和实现原理,以及一些注意事项,基于此完成对io.Cop ...
- MD文本编辑工具推荐-matktext
最开始是用vscode编辑markdown文档,左边写右边看效果的实时渲染模式,对于markdown编辑来说是多余的,多是文字类的内容,配以插图,复杂表格和脑图则更少.之后接触到Typora,所打即所 ...
- 图像分割_评价指标_PSNR峰值信噪比和SSIM结构相似度
PSNR psnr是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价图像的客观标准. 为了衡量经过处理后的影像品质,我们通常会参考PSNR值 ...
- maven项目创建后添加resources等文件夹
maven项目初始化只生成src/main/resources目录,但是这个不够用,我们得创建 src/main/java目录 src/test/java目录 src/test/resources目录 ...
- 浮点指令之找main函数
环境 vs2019 编译选项x86(32位) debug版本 float指令练习 //c++源码 #include<stdio.h> int main(int argc,char* arg ...