【优选算法】(第三十五篇)

news/2024/10/22 7:59:42/

目录

验证栈序列(medium)

题目解析

讲解算法原理

编写代码

N叉树的层序遍历(medium)

题目解析

讲解算法原理

编写代码


验证栈序列(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给定 pushed 和 popped 两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进⾏的推⼊push和弹出pop操作序列的结果时,返回 true ;否则,返回 false 。

⽰例1:
输⼊:pushed=[1,2,3,4,5],popped=[4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执⾏:
push(1),push(2),push(3),push(4),pop()->4,
push(5),pop()->5,pop()->3,pop()->2,pop()->1
⽰例2:
输⼊:pushed=[1,2,3,4,5],popped=[4,3,5,1,2]
输出:false
解释:1不能在2之前弹出。

提⽰:
◦ 1 <= pushed.length <= 1000
◦ 0 <= pushed[i] <= 1000
◦ pushed 的所有元素互不相同
◦ popped.length == pushed.length
◦ popped 是 pushed 的⼀个排列

讲解算法原理

解法(栈):
算法思路:

⽤栈来模拟进出栈的流程。
⼀直让元素进栈,进栈的同时判断是否需要出栈。当所有元素模拟完毕之后,如果栈中还有元素,那么就是⼀个⾮法的序列。否则,就是⼀个合法的序列。

编写代码

c++算法代码:

class Solution
{
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> st;int i = 0, n = popped.size();for(auto x : pushed){st.push(x);while(st.size() && st.top() == popped[i]){st.pop();i++;}}return i == n;}
};

java算法代码:

class Solution
{public boolean validateStackSequences(int[] pushed, int[] popped) {Stack<Integer> st = new Stack<>();int i = 0, n = popped.length;for(int x : pushed){st.push(x);while(!st.isEmpty() && st.peek() == popped[i]){st.pop();i++;}}return i == n;}
}

N叉树的层序遍历(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给定⼀个N叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输⼊是⽤层序遍历,每组⼦节点都由null值分隔(参⻅⽰例)。
⽰例1:

输⼊:root=[1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]
⽰例2:

输⼊:root=[1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

提⽰:
◦ 树的⾼度不会超过 1000 ◦ 树的节点总数在 [0, 10^4] 之间

讲解算法原理

解法:
算法思路:

层序遍历即可~
仅需多加⼀个变量,⽤来记录每⼀层结点的个数就好了。

编写代码

c++算法代码:

/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/
class Solution
{
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret; // 记录最终结果 queue<Node*> q; // 层序遍历需要的队列if(root == nullptr) return ret;q.push(root);while(q.size()){int sz = q.size(); // 先求出本层元素的个数 vector<int> tmp; // 统计本层的节点for(int i = 0; i < sz; i++){Node* t = q.front();q.pop();tmp.push_back(t->val); for(Node* child : t->children) // 让下⼀层结点⼊队 {if(child != nullptr)q.push(child);}}ret.push_back(tmp);}return ret;}
};

java算法代码:

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/
class Solution
{public List<List<Integer>> levelOrder(Node root) {List<List<Integer>> ret = new ArrayList<>();if(root == null) return ret;Queue<Node> q = new LinkedList<>();q.add(root);while(!q.isEmpty()){int sz = q.size();List<Integer> tmp = new ArrayList<>(); // 统计本层的结点信息 for(int i = 0; i < sz; i++){Node t = q.poll();tmp.add(t.val);for(Node child : t.children) // 让孩⼦⼊队 {if(child != null)q.add(child);}}ret.add(tmp);}return ret;}
}


http://www.ppmy.cn/news/1538369.html

相关文章

vue3学习:数字时钟遇到的两个问题

在前端开发学习中&#xff0c;用JavaScript脚本写个数字时钟是很常见的案例&#xff0c;也没什么难度。今天有时间&#xff0c;于是就用Vue的方式来实现这个功能。原本以为是件非常容易的事&#xff0c;没想到却卡在两个问题上&#xff0c;一个问题通过别人的博文已经找到答案&…

vue3中的computed属性

模板界面&#xff1a; <template><div class"person"><h2>姓&#xff1a; <input type"text" v-model"person.firstName" /></h2><h2>名&#xff1a; <input type"text" v-model"person…

Maven打包运行,引入三方jar及打包,不导入本地库的方法

Maven打包运行&#xff0c;引入三方jar及打包&#xff0c;不导入本地库的方法 maven、打包、springboot、jar、本地、引入背景 业务系统要对接某硬件&#xff0c;需要用到其三方jar&#xff0c;maven官方仓库没有这个&#xff0c;我也没有maven&#xff0c;又不想mvn install…

通过Python构建自动化股票分析工具:从数据抓取到技术分析与买卖信号生成

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 前言 股票市场是一个高度复杂和波动的领域,投资者常常需要依赖技术分析和数据驱动的策略来做出买卖决策。借助Python,我们可以轻松自动化这些任务,帮助我们分析股票趋势、判断买卖时机,并生成交易信号。本文…

TensorFlow 的核心概念

TensorFlow 是一个开源的机器学习框架&#xff0c;由 Google 开发和维护。它提供了一个强大的工具集&#xff0c;用于构建和训练各种机器学习模型。 TensorFlow 的核心概念是计算图&#xff08;Computational Graph&#xff09;。计算图由节点&#xff08;Nodes&#xff09;和…

Python知识点:基于Python工具,如何使用Scikit-Image进行图像处理与分析

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 基于Python的Scikit-Image图像处理与分析指南 在Python的科学计算生态系统中&am…

Qt打开excel文件,并读取指定单元格数据

1. 下载并安装QXlsx库&#xff0c;详见之前的博文Qt子线程创建excel文件报错QObject: Cannot create children for a parent that is in a different thread.-CSDN博客 2. // 创建一个XlsxDocument对象QString filename "D:\\mydocuments\\data_acquisition\\data\\tes…

[实时计算flink]双流JOIN语句

Flink SQL支持对动态表进行复杂而灵活的连接操作&#xff0c;本文为您介绍如何使用双流JOIN语句。 背景信息 实时计算的JOIN和传统批处理JOIN的语义一致&#xff0c;都用于将两张表关联起来。区别为实时计算关联的是两张动态表&#xff0c;关联的结果也会动态更新&#xff0c…