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 操作序列的结果时, 返回的更多相关文章

  1. selenium - 弹出框操作

    # 6. 弹出框操作 # 6.1 页面弹出框操作# 页面弹出框 是一个html页面的元素,由用户在页面的操作触发弹出# (1)执行触发操作之后,等待弹出框出现之后,# (2)再定位弹出框中的元素并操作 ...

  2. 如何设置secureCRT的鼠标右键为弹出文本操作菜单功能

    secureCRT的鼠标右键功能默认是粘贴的功能,用起来和windows系统的风格不一致, 如果要改为右键为弹出文本操作菜单功能,方便对选择的内容做拷贝编辑操作,可以在 options菜单----&g ...

  3. CKFinder 弹出窗口操作并设置回调函数

    CKFinder 弹出窗口操作并设置回调函数 官方例子参考CKFinderJava-2.4.1/ckfinder/_samples/popup.html 写一个与EXT集成的小例子 Ext.defin ...

  4. bootstrap 弹出框点击其他区域时弹出框不消失选项设置

    默认情况下,bootstrap 弹出框点击其他区域时,弹出框会自动关闭,在很多时候,我们可能会希望达到和原生弹出框一样的效果,避免不小心点击其他区域时弹框自动隐藏,尤其是对于一些复杂的表单,重复填写可 ...

  5. ArcGIS 添加 MarkerSymbol 弹出“图形符号无法序列化为 JSON”错误

    今天在做一个demo,向自定义图层中添加MarkerSymbol的时候,弹出“图形符号无法序列化为 JSON”错误,之前都没有出现过这个问题,我们首先来看一看我是怎样去添加图层,然后向图层中添加Gra ...

  6. 网页上弹出pop窗口实例,(document).height()与$(window).height()的区别

    #dvbg{background-color:#666666; position:absolute; z-index:99; left:0; top:0; display:none; width:10 ...

  7. jquery的Layer弹出框操作

    在layer中,我们要先获取窗口的索引,然后再进行操作. var index = parent.layer.getFrameIndex(window.name); //获取窗口索引 $("# ...

  8. 关于winform窗体关闭时弹出提示框,选择否时窗体也关闭的问题

    在窗体中有FormClosing这个事件,这个事件是在窗体关闭时候运行的.如果要取消某个事件的操作,那么就在该事件中写上e.Cancel=true就能取消该事件,也就是不执行该事件.所以,你要在窗体关 ...

  9. 页面弹出全屏浮层或遮罩时,禁止底层body滚动

    · 解决方法 针对弹出的浮层的 touchmove事件,添加阻止浏览器默认行为. $('.mask-wrapper').on('touchmove', function (event) { // 监听 ...

  10. easyui-prompt弹出框操作

    效果图如下: 代码如下: $(document).ready(function () { //绑定按钮操作 $('#btnMove').click(function () { var ids = ge ...

随机推荐

  1. 解决redis从服务器未配置主服务器密码导致数据未同步&磁盘饱满问题

    问题前置场景 本人前几天买了一台2核4G+40G磁盘空间的云服务器用来学习使用,在服务器上安装了docker.为了学习redis主从架构,使用docker-compose部署了一主二从三台redis服 ...

  2. Java打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

    代码如下: public static void main(String[] args) { int a,b,c; for(int num = 100;num <= 999;num++) { a ...

  3. Linux下ElasticSearch及IK分词插件安装

    ElasticSearch及IK分词插件相关安装 一. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. ...

  4. 我在使用Winform7.0开发海康相机应用的时候系统悄无声息的退出

    一.简介 1.说明一下 最近,我在开发一个玻璃幕墙检测的项目,这个项目需要使用到海康的相机系统.业务是这样的,相机按着指定的坐标,扫描玻璃幕墙的每块玻璃,通过算法查看是否有损坏的,如果有就发出报警信息 ...

  5. MySQL 中分区表

    MySQL 中的分区表 InnoDB 逻辑存储结构 表空间 (Tablespace) 段 (segment) 区 (extent) 页 (page) 行 (row) InnoDB 数据页结构 分区别表 ...

  6. C语言。格式化符号

    %s 输出字符串 %d 输出整形数字 %f 输出浮点数数字 %c 输出字符 %x 输出16进制 %04d 输出长度固定的整形数字(0001,0002,....)

  7. Swithch反汇编(四种)

    ------------恢复内容开始------------ Switch语法格式 Switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; bre ...

  8. 为什么 PostgreSQL 的适用性很强?

    说起使用数量最大的数据库SQLite 它是全球最广泛部署的数据库引擎.它存在于你的手机中,存在于你的浏览器中,如果你搜索你的电脑,你也会在其中找到它的 .db 文件.SQLite 受到 Postgre ...

  9. 【技术实战】Vue技术实战【三】

    需求实战一 效果展示 代码展示 <template> <div style="display: flex;"> <div style="di ...

  10. IDEA: 菜单栏消失的解决办法

    解决方案 步骤一 双击shift输入View,点击第一个 步骤二如图所示 至此问题解决