首页 > 其他分享 >2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回

2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回

时间:2023-10-14 17:07:05浏览次数:39  
标签:popped int ++ pop pushed && 序列 size

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)
}

2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回_出栈

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);
}

2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回_#include_02

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;
}

2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时, 返回_出栈_03

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 操作序列的结果时, 返回_#include_04

标签:popped,int,++,pop,pushed,&&,序列,size
From: https://blog.51cto.com/moonfdd/7862301

相关文章

  • 基因分型数据与碱基序列的输入
    基因分型数据和碱基序列的输入都是对DNA信息的编码,但它们的表达方式和所提供的信息不同。为了理解它们之间的联系,让我们首先明确这两者的定义:基因分型数据:基因分型数据通常是在特定的单核苷酸位置上(即SNP位置)对个体的DNA的描述。每个SNP位置可以有三种情况:两种纯合子和一种杂合......
  • 2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它
    2023-10-14:用go语言,给定pushed和popped两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入push和弹出pop操作序列的结果时,返回true;否则,返回false。输入:pushed=[1,2,3,4,5],popped=[4,5,3,2,1]。输出:true。来自美团。来自左程云。答案......
  • 子序列有关问题总结
    我们定义子序列为:从原序列中选取若干个元素,按原序列的顺序排列的序列。1.最长上升子序列问题给定一个长为\(n\)的序列\(a\),求其中的最长的上升子序列的大小。1.1动态规划做法设\(dp_i\)为以\(a_i\)结尾的最长的上升子序列的大小,则序列\(a\)上最长的上升子序列的大小为\(\mat......
  • # 定义函数,单个自变量+单个序列(独热编码)控制变量 # curve_fit函数要求X中的元素都是
    importnumpyasnpimportpandasaspdfromscipy.optimizeimportcurve_fit#定义函数,单个自变量deffun_exp(X,k):a,x,b=XY=a*np.exp(k*x)+breturnY#读取数据df_test=pd.DataFrame([[300,0,30,300],[3......
  • python实现根据序列ID从fasta文件中删除指定的序列
     001、[root@pc1test1]#lsa.farm.listtest.py[root@pc1test1]#cata.fa##测试fasta>chr1tttcccggg>chr2tttgggjjjcccjjjjjj>chr3ccc>chr4aaaaatt[root@pc1test1]#catrm.list##删除列表chr2chr4[root@p......
  • [MRCTF2020]Ezpop
    原理反序列化解题过程记得tostring的触发方式!还有urlencode只要是通过get请求,参数记得url编码https://blog.csdn.net/pakho_C/article/details/126057111......
  • seqkit 软件根据序列ID删除指定的序列
     001、单个删除(base)[root@pc1test1]#lsa.fa(base)[root@pc1test1]#cata.fa##测试文件>chr1tttcccggg>chr2tttgggjjjcccjjjjjj>chr3ccc>chr4aaaaatt(base)[root@pc1test1]#seqkitgrep-v-p"chr1"a.fa......
  • python实现fasta文件碱基序列每行按照指定数目输出
     001、(base)[root@pc1test1]#lsa.fatest.py(base)[root@pc1test1]#cata.fa##测试fasta>chr1tttcccggg>chr2tttgggjjjcccjjjjjj>chr3ccc>chr4aaaaatt(base)[root@pc1test1]#cattest.py##程序#!/usr/bin/envpython3#......
  • 在Python中使用LSTM和PyTorch进行时间序列预测|附代码数据
    全文链接:http://tecdat.cn/?p=8145最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。顾名思义,时间序列数据是一种随时间变化的数据类型。例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格诸如长期短期记忆网络(LSTM)之类的高级深度学习模型能......
  • python 实现统计fasta文件每一条序列的长度
     001、a、[root@pc1test1]#lsa.fatest.py[root@pc1test1]#cata.fa##测试fasta>chr1tttcccggg>chr2tttgggccc>chr3cccttt>chr4aaaaattt[root@pc1test1]#cattest.py##统计每条序列的长度#!/usr/bin/envpython3#-*-coding:......