数据结构与算法
文章平均质量分 71
MarsNov
Courage is going from failure to failure without losing enthusiasm.
展开
-
THU数据结构编程作业一:查询范围(Range)
查询范围(Range) 描述 数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。输入 第一行包括两个整数:点的总数n,查询的次数m。第二行包含n个数,为各个点的坐标。以下m行,各包含两个整数:查询区间的左、右边界a和b。输出 对每次查询,输出落在闭区间[a, b]内点的个数。样例Input5 21 3 7 9 114 67 12Output03限制 0 ≤ n,原创 2015-09-24 21:00:29 · 3012 阅读 · 2 评论 -
二叉搜索树中找出比K大的最小的那个数
这是一道面试的算法题,题目不难,但是在面试的时候是要求直接在白板上写程序,感觉自己还是弱爆了。第一次体验这种面试方式,虽然被虐,但是感觉还是挺好的,这方面的经验还是需要积累。题目: 在一个二叉搜索树种查找比某个数(K)大数中最小的那个。先把二叉树相关的构造代码贴上,下面是二叉树的节点定义。/***节点*/public class Node { private int data;原创 2016-04-24 21:00:22 · 4375 阅读 · 0 评论 -
重构二叉树(Java实现)
之前写过二叉树重构的C++实现,下面的是Java实现基本原理还是递归。package com.mars.binaryree;import java.util.Arrays;/** * 二叉树重构 * @author Mars * */public class Solution { public static void main(String[] args) { int[原创 2016-05-11 11:02:13 · 2946 阅读 · 1 评论 -
无序数组中找到第K小的数(或者找到最小的K个数)
题目:在一个很大的无序数组中用最快的速度找到第K小的数(或者找到最小的前K个数)。(类似于,在一个有1000000个数的数组中找到最小的100个数)对于这个问题首先想到的可能是把这个数组进行按从小到大排序,排序完以后就可以直接确定第K小的数字了。但是,这样够快吗?假设我们是先对数组进行排序,那么肯定会选择最快的排序算法,对于庞大的数组首选当然是快速排序,而且是随机快速排序。现在考虑整个快速排序的过程原创 2016-04-25 12:15:47 · 8442 阅读 · 0 评论 -
THU数据结构编程作业一:真二叉树重构(Proper Rebuild)
本题是对二叉树进行重构,与普通的二叉树重构不同的是本题是针对特殊的二叉树——真二叉树进行重构。 对于普通的二叉树我们知道可以通过 中序遍历+ 前序遍历/后序遍历 完成重构,并且如果仅已知前序遍历和后续遍历无法对一颗普通二叉树进行重构(可以简单理解为当某节点只有一个孩子节点的时候无法判断该孩子节点是左孩子还是右孩子),之前的博客已经进行了整理。但是如果对于一颗真二叉树在仅知道前序遍历和后序遍历的情况原创 2015-10-29 20:07:56 · 7159 阅读 · 7 评论 -
数据结构与算法学习笔记——二叉树遍历(二)(Morris Traversal)
前面介绍了一般的二叉树遍历方法,包括递归和迭代。这两种方法的空间复杂度都是O(n)。 二叉树遍历的另外一种方法:Morris遍历二叉树 的空间复杂度为O(1),并且还不改变原本的树结构,时间复杂度依然为O(n)。Morris的核心是利用叶子节点的空闲右孩子指针返回到根节点。中序遍历最初Morris是为中序遍历二叉树提出的方法,在中序的基础上可实现先序和后续遍历,这里先整理中序遍历。 中序遍历的顺原创 2015-10-26 17:15:00 · 1361 阅读 · 0 评论 -
数据结构与算法学习笔记——二叉树重构(递归)
关于二叉树的另外一个重要内容就二叉树的重构,二叉树的重构就是根据已知的二叉树前序,中序,后续遍历的数组重新构造出园二叉树。 对于普通的二叉树可以由 前序遍历+中序遍历 或者 后序遍历+中序遍历 重构(注意:二叉树各节点不能有相同值)。 对于只知道 前序遍历和后续遍历是否可以进行二叉树重构呢?对于普通二叉树以上两个条件是无法重构二叉树的,比如: 1 1原创 2015-10-26 22:38:11 · 4387 阅读 · 0 评论 -
数据结构与算法学习笔记——二叉树遍历(一)(递归、迭代)
最近学习二叉树相关的内容,个人认为其中最重要的应该就是二叉树的遍历了,包括先序,中序,后续。通常二叉树的遍历有三种方法:递归、迭代和Morris遍历。递归应该是最容易理解了, Morris遍历最难理解。关于Morris遍历后面会单独再整理。节点的定义struct Node{ int data; Node *parent, *left, *right; Node(in原创 2015-10-26 15:52:19 · 1004 阅读 · 0 评论 -
THU数据结构编程作业一:隧道(Tunel)
本题主要解决的问题: 常数时间复杂度范围内获得栈的最大值; 用两个栈模拟一个队列。 细节问题:scanf 和 getchar 获取输入的问题。 问题描述 现有一条单向单车道隧道,每一辆车从隧道的一端驶入,另一端驶出,不允许超车。该隧道对车辆的高度有一定限制,在任意时刻,管理员希望知道此时隧道中最高车辆的高度是多少。 现在请你维护这条隧道的车辆进出记录,并支持查询最高车辆的功能输入 第一原创 2015-10-18 11:37:01 · 1388 阅读 · 0 评论 -
THU数据结构编程作业一:列车调度(Train)
问题描述某列车调度站的铁道联接结构如图所示。其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S的容量有限,同时驻留的车厢不得超过m节。 设某列车由编号依次为{1, 2, …, n}的n节车厢组成。调度员希望知道,按照以上交通规则,这些车厢能否以原创 2015-10-17 09:35:08 · 5583 阅读 · 3 评论 -
THU数据结构编程作业一:祖玛(Zuma)
* 祖玛(Zuma) *描述 祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现原创 2015-09-25 08:50:24 · 9672 阅读 · 4 评论 -
找出局部有序数组的最大值
题目:将一个有序数组arr[n]的前面一段arr[0…..k]移动到数组的末尾,找出新数组的最大值。比如:int[] arr1 = {1, 5, 10, 20, 25, 30, 35, 50, 60, 70, 80, 100, 120, 150, 200};int[] arr2 = {5, 10, 20, 25, 30, 35, 50, 60, 70, 80, 100, 120, 150, 200原创 2016-04-24 21:50:03 · 4229 阅读 · 0 评论