判断一个序列是不是堆

解决这个问题前先来看一个题目,如下:
以下序列不是堆的是()
A.(100,85,98,77,80,60,82,40,20,10,66)
B.(100,98,85,82,80,77,66,60,40,20,10)
C.(10,20,40,60,66,77,80,82,85,98,100)
D.(100,85,40,77,80,60,66,98,82,10,20)
要解决这个问题就要知道关于判断堆的知识:
堆分为最大堆和最小堆,如果把一个数列画为一颗二叉树的话,那么根结点是i,左子树是2i,右子树是2i+1。对于最大堆而言,所有的根节点都大于其左右子树,而在最小堆中,所有的根节点都小于其左右子树。
所以这道题目中的A,B选项可以构成最大堆,C选项可以构成最小堆,而只有D选项无法满足构成堆的条件

原文地址:https://blog.51cto.com/14289397/2481822

时间: 2024-12-15 11:19:18

判断一个序列是不是堆的相关文章

判断一个序列是否是栈的弹出序列

给定两个序列,判断后一个序列是否是 第一个序列入栈的出栈顺序 学习过在数据结构的人肯定遇到过很多这种题目 比如给定一个序列 如 1 2 3 4 5的入栈序列 问 4 5 3 2 1是不是前者的一个出栈序列 思路 首先看 出栈序列 4 5 3 2 1 第一个元素是4 也就是说入栈时 必须要先找到4 然后出栈在继续找 5 ,可以用一个栈来存储当前的入栈元素 比如在 4出栈是 此时 栈中应该有 1 2 3 因为 入栈顺序为 1 2 3 4 123 在4的前面,所以还继续在栈中 下面以一个表格来表示 步

第29题:判断一个序列是否是另一个push序列的pop序列

github:https://github.com/frank-cq/MyTest 第29题:输入两个整数序列,其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的.比如输入的push序列是 1.2.3.4.5,那么4.5.3.2.1 就有可能是一个pop序列,因为可以有如下的push和pop序列:push 1, push 2, push 3, push 4,pop, push 5, pop, pop, pop

(hdu step 8.1.2)Train Problem I(站的基本应用——判断一个序列经过栈后是否能够得到第二个序列)

题目: Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 78 Accepted Submission(s): 60   Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A l

判断一个序列是否是一个二叉查找树的后序遍历结果

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回 true,否则返 回 false . 例如输入 5.7.6.9.11 .10.8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回 true. 如果输入 7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回 false . 思路:对于树的很多问题都是可以使用递归来解决.这道题也不例外.首先明白后序遍历的特点,最后一个是根元素.左子树都比根元素打,右

22-判断一个序列是否是另一个序列入栈的弹出序列

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 解析: 注:当无法抽象的解决问题时,应该给出正面和反面的实例来分析问题,发现规律. 要判断一个输入序列按照顺序压栈出栈,能否得到一个给定的输出序列? 那么我们需要一个栈,来按照给定输出序列的顺序,将输入序列顺序入栈. 如:

如何判断一个C++对象是否在堆上(通过GetProcessHeaps取得所有堆,然后与对象地址比较即可),附许多精彩评论

在帖子如何判断一个C++对象是否在堆栈上 中, 又有人提出如何判断一个C++对象是否在堆上. 其实我们可以参照那个帖子的方法类似实现,我们知道堆就是Heap,在windows上我们可以通过GetProcessHeaps来得到所有的堆句柄,而我们这里只要知道Windows上的Heap Handle,其实就是堆的起始地址,就可以写如下代码了. #include <iostream>#include <windows.h> using namespace std; BOOL IsObje

Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1.2.3.4.5,那么4.5.3.2.1 就有可能是一个pop 系列,但序列4.3.5.1.2 就不可能是push 序列1.2.3.4.5 的pop 序列. 分析: 我们首先定义遍历push的序数i=0  遍历pop序列的序数 j =0 我们可以先遍历给出的push序列,并且时刻与pop序列的头元素p

给定入栈序列,判断一个串是否为出栈序列

剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) { if (Spush.length <= 0 || Spop.length <= 0 || Spush.length != Spop.length) return false; int len = Spush.length; Stack<Integer> s = new Stack<I

Python基础课:定义一个函数,输入一个序列,判断序列是顺序还是逆序,顺序输出UP,逆序输出DOWN,否则输出None

1 def fun(arg): 2 try: 3 li = list(arg) 4 if(sorted(li)==li): 5 print('顺序序列UP') 6 elif(sorted(li, reverse=True)==li): 7 print('逆序序列DOWN') 8 else: 9 print('None') 10 except Exception as e: 11 print('您输入的不是序列,请输入一个序列') 12