news 2026/7/28 17:02:13

【剑指offer】4.3 具体让抽象问题具体化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【剑指offer】4.3 具体让抽象问题具体化

面试题21:包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

解答:代码如下:

stack<int> ValSta; stack<int> MinSta; void push(int value) { ValSta.push(value); if(MinSta.empty() || (!MinSta.empty() && value < MinSta.top())) { MinSta.push(value); } else { MinSta.push(MinSta.top()); } } void pop() { if(!ValSta.empty()) { ValSta.pop(); } if(!MinSta.empty()) { MinSta.pop(); } } int top() { if(!!ValSta.empty()) { return ValSta.top(); } } int min() { if(!MinSta.empty()) { return MinSta.top(); } }

面试题22:栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。

解答:代码如下:

bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size() == 0 || popV.size() == 0) { return false; } stack<int> sta; int i = 0; int j = 0; while(i < pushV.size()) { sta.push(pushV[i++]); while(j < popV.size() && sta.top() == popV[j]) { sta.pop(); j++; } } return sta.empty(); }

面试题23:从上往下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。二叉树结点的定义如下:

struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };

解答:代码如下:

vector<int> PrintFromTopToBottom(BinaryTreeNode* root) { vector<int> vec; if(NULL == root) { return vec; } deque<BinaryTreeNode *> que; que.push_back(root); while(!que.empty()) { BinaryTreeNode *pNode = que.front(); que.pop_front(); vec.push_back(pNode->m_nValue); if(pNode->m_pLeft != NULL) { que.push_back(pNode->m_pLeft); } if(pNode->m_pRight != NULL) { que.push_back(pNode->m_pRight); } } return vec; }

面试题24:二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。

解答:代码如下:

bool Verify(vector<int> sequence,int left,int right) { if(sequence.empty()|| left > right) { return false; } int root = sequence[right]; int i = left; for(;i < right;i++) { if(sequence[i] > root) { break; } } for(int j = i;j < right;j++) { if(sequence[j] < root) { return false; } } bool Left = true; if(i > left) { Left = Verify(sequence,left,i - 1); } bool Right = true; if(i < right - 1) { Verify(sequence,i,right - 1); } return Left && Right; } bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size() == 0) { return false; } return Verify(sequence,0,sequence.size() - 1); }

面试题25:二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的结点形成一条路径。二叉树结点的定义如下:

struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };

解答:代码如下:

void DFSfind(vector<vector<int>> &res,vector<int> &vec,BinaryTreeNode* root,int expectNumber,int sum) { if(NULL == root) { return ; } vec.push_back(root->m_nValue); sum += root->m_nValue; if(root->m_pLeft == NULL && root->m_pRight == NULL && sum == expectNumber) { res.push_back(vec); sum = 0; } if(root->m_pLeft != NULL) { DFSfind(res,vec,root->m_pLeft,expectNumber,sum); } if(root->m_pRight != NULL) { DFSfind(res,vec,root->m_pRight,expectNumber,sum); } vec.pop_back(); } vector<vector<int>> FindPath(BinaryTreeNode* root,int expectNumber) { vector<vector<int>> res; if(NULL == root) { return res; } vector<int> vec; int sum = 0; DFSfind(res,vec,root,expectNumber,sum); return res; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 16:55:56

计算机JAVA毕设实战-基于 SpringBoot 的校园资讯分享与论坛互动交流管理系统 高校师生线上交流论坛服务平台设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/28 16:54:55

从零开始学Java之二——运算符

常用的运算符&#xff1a;算术运算符赋值运算符比较运算符逻辑运算符条件运算符 一、算数运算符&#xff1a; 算数运算符名称例加法112-减法2-10*乘法2*36/除法6/23%求余6%42自加1int i1&#xff1b;i&#xff1b;--自减1int i1&#xff1b;i--&#xff1b; 注&#…

作者头像 李华
网站建设 2026/7/28 16:54:22

历史心学数字化:代数系统与可视化技术解析

1. 项目背景与核心概念解析 "云藏山鹰代数信息系统"这个命名本身就蕴含着丰富的文化内涵和技术特征。作为一套融合了数学、历史与信息技术的交叉学科系统&#xff0c;它最显著的特点是将传统心学思想与现代代数系统进行了创造性结合。这种结合不是简单的概念拼凑&…

作者头像 李华
网站建设 2026/7/28 16:52:11

Leaf size is too small for the input dataset 解决办法

问题描述 在使用PCL的voxelgrid filter时&#xff0c;若点云过大&#xff0c;而设置的voxel比较小&#xff0c;可能会导致voxel的数量超过int32的上限&#xff0c;从而会出现警告&#xff1a;“Leaf size is too small for the input dataset”。 通用解决办法 此文提出了几…

作者头像 李华
网站建设 2026/7/28 16:48:36

信息发布平台app软件开发

信息发布平台App开发流程编辑&#xff1a;araolin&#xff08;私域邦网络土土哥&#xff09;需求分析与规划 明确平台的核心功能&#xff08;如用户注册、信息发布、分类浏览、搜索、评论等&#xff09;&#xff0c;目标用户群体&#xff08;企业、个人、特定行业&#xff09;&…

作者头像 李华