
数据结构面试、数据结构和算法、数据结构笔试
发布日期:2021-05-10 06:37:01
浏览次数:37
分类:精选文章
本文共 1171 字,大约阅读时间需要 3 分钟。
共享知识库答复
1. 将二叉查找树转变成排序的双向链表
- 做法:利用二叉树的中序遍历(即从左到根到右)来生成双向链表。将遍历得到的顺序构造出链表。
- 实现:中序遍历代码如下:
void inOrderTraversal(BinaryTreeNode* root, DoublyLinkedList* list) { if (!root) return; inOrderTraversal(root->left, list); list.insert(root->value); inOrderTraversal(root->right, list);}
结果:链表按升序排列。
2. 栈的min函数,入栈、出栈均为O(1)
- 做法:维护一个栈,在栈顶部保存当前的最小元素。每次入栈时,比较当前元素与栈顶的最小值,更新最小值。
- 实现:
struct Stack { int min; int top; int size; Stack() : min(10000), top(-1), size(0) {} void push(int value) { if (value < min) min = value; top++; size++; } void pop() { top--; size--; }};
注意:所有操作时间复杂度为O(1)。
3. 子数组的最大和
- 做法:利用动态规划,记录当前的最大和。
- 思路:遍历数组,计算从当前位置开始的连续子数组和,更新最大和。
- 代码:
int maxSubarraySum(int[] nums, int n) { int maxCurrent = 0, maxGlobal = nums[0]; for (int i = 0; i < n; i++) { maxCurrent = Math.max(nums[i], maxCurrent + nums[i]); maxGlobal = Math.max(maxGlobal, maxCurrent); } return maxGlobal;}
复杂度分析:O(n)
4. 二元树的路径和挑战问题
- 做法:使用深度优先搜索(DFS),记录路径和,并判断是否等于目标值。
- 实现:每次进入节点时递归,累加当前节点值,直到叶节点。
5. 查找最小的k个元素
- 做法:使用堆结构,按大小排序,弹出k个最小元素。
- 实现:使用最小堆,弹出k次堆顶元素。
(以下问题鉴于篇幅限制未展开详细解答,具体实现可根据前述思路定制。)
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月18日 10时54分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
机器学习全教程
2019-03-14
idea在连接mysql数据库时区错误
2019-03-14
2021-05-14
2019-03-14
Kali-linux:nmap命令
2019-03-14
工程经济—建设工程定额
2019-03-14
1Z204050、施工质量不合格的处理
2019-03-14
【字节网盘】九款超好看不同页面404源码
2019-03-14
两款404页面自动跳转源码html
2019-03-14
一款好看新颖的404页面源码
2019-03-14
MacOS 应对系统无响应的方法
2019-03-14
Mac隐藏辅助功能|自定义苹果Mac显示器
2019-03-14
ActivityNotFoundException异常错误
2019-03-14
git远程仓库切换
2019-03-14
学习Vue.js2.0(国外视频教程)
2019-03-15
ubuntu 16.04 镜像下载
2019-03-15
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2019-03-15
微信小程序云开发:怎么删除云函数?已解决
2019-03-15
PyCharm配置anaconda环境
2019-03-15