堆的 两种实现 (数组和STL)】的更多相关文章

#include<cstdio> #include<iostream> #include<algorithm> #include<vector> bool cmp(int x,int y) { return x>y; } int main() { vector<int> a; int num,n; scanf("%d",&n); ;i<=n;i++) { scanf("%d",&…
基本思想: 两种操作都跟树的深度成正比,所以复杂度  O(log(n)) ; push():在向堆中插入数值时,首先在堆的末尾插入该数值,然后不断向上提直到没有大小颠倒为止. pop(): 从堆中取出一个数值时,首先把堆的最后一个节点的数值复制到根节点上,并且删除最后一个节点,然后不断向下交换直到没有大小颠倒为止,在向下交换的时候,如果有两个儿子,那就选择数值较小的(如果可以交换的话)进行交换. 数组实现: #include <cstdio> ; ; void push(int x) { in…
方法一: 新建一个数组,遍历原数组,在新数组内用IndexOf查找原数组内的每一项,如果没有找到,则添加到其中 代码如下: function arrayNew(arrs ){ var newArray = []; for(var i=0;i<arrs.length;i++){ if(newArray.indexOf){ if(newArray.indexOf(arrs[i])==-1){newArray.push(arrs[i])} } else{ if(indexOf(arrs[i],newA…
书上实现: 二叉搜索数的特点:高效实现 插入一个数值,查询是否包含某个数值,删除某一个数值. 所有的节点都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的特点. 查询:如果当前数值等于根节点返回true,比根节点小,就往左儿子走,否则往右儿子走. 插入:按照查找数值的方法去找其所在位置,从根节点出发,往左右儿子中找到合适位置. 删除:需要删除的节点没有左儿子,那么就把右儿子提上去. 需要删除的节点的左儿子没有右儿子,那么就把左儿子提上去 以上两种情况都不符合的话,就把左儿子的…
参考自http://blog.sina.com.cn/s/blog_798b04f90100ta67.html http://www.cnblogs.com/fguozhu/articles/2661055.html 堆.栈.常量池 首先介绍一下堆.栈.常量池中存放的数据类型吧. 堆:存放所有new出来的对象: 栈:存放基本数据变量和对象的引用,对象(new出来的对象)本身不存在在栈中,而是存放在堆中或者常量池中(字符串对象存放在常量池中): 常量池:存放基本类型常量和字符串常量. 对于栈和常量…
参考 堆排序中两种建堆方法的比较 第一种方法HeapInsert 它可以假定我们事先不知道有多少个元素,通过不断往堆里面插入元素进行调整来构建堆. 它的大致步骤如下: 首先增加堆的长度,在最末尾的地方加入最新插入的元素. 比较当前元素和它的父结点值,如果比父结点值大,则交换两个元素,否则返回. 重复步骤2. 这种插入建堆的时间复杂度是O(NlogN) 第二种方法Heapify 从最后一个非叶子节点一直到根结点进行堆化的调整.如果当前节点小于某个自己的孩子节点(大根堆中),那么当前节点和这个孩子交…
在python中,实现多维数组或矩阵,有两种常用方法: 内置列表方法和numpy 科学计算包方法. 下面以创建10*10矩阵或多维数组为例,并初始化为0,程序如下: # Method 1: list arr1 = [[0]*10 for i in range(10)] arr1[0][0] = 1 print "Method 1:\n", arr1 arr2 = [[0 for i in range(10)] for i in range(10)] arr2[0][0] = 1 pri…
项目使用maven    springMVC 有需求 将前台的数组   在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true,  ] 如果Post是string数组或者int数组,则ajax中traditional: true, 如果Post是对象数组,则ajax中traditional: false,否则对象将为空 //首先 是数组数据的封装 $.each(checkedNodes,function(i,node){ nodeArr.pus…
PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = array( 'where' => 'uid=2', 'order' => 'uid desc', );  1. array_merge,如果两个数组存在相同的key,后面的一个会覆盖前面的 复制代码代码如下: <?php $c = array_merge($a, $b); var_exp…
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMemberInArray($array) { // 去掉重复数据的数组 $unique_arr = array_unique ( $array ); // 获取重复数据的数组 $repeat_arr = array_diff_assoc ( $array, $unique_arr ); return $rep…