- 博客(7)
- 收藏
- 关注
原创 索引最大堆
普通堆(本文仅以最大堆为例)的局限性主要有以下两点: 1.如果原始待排序或者求最值的数据元素很大,交换它们的位置性能损耗。 2.元素在堆化后的数组中位置不确定,只能过遍历找到。 解决上述两个弊端就是用索引的方式,二叉树的节点里存储的不再是原始数据,而是原始数据在数组中的索引。在插入弹出操作中的上浮下沉比较交换中,比较大小仍然是原始数据,但交换和、上浮下沉就是对于原始数据...
2018-05-30 15:00:10 188
原创 优先队列
优先队列是一种特殊的队列,只是弹出元素时弹出的是(权重或者某个指定key)最大的元素。基于有序数组、无序数组、有序链表的实现类似于栈和队列的算法,这里说说基于完全二叉树的最大堆实现。 完全二叉树的层次遍历序列和数组的索引顺序完全一致,这里用数组来存储二叉树的节点值,数组索引之间的关系可以表示树节点的父子关系:某节点在数组中索引为k,其父节点索引为k/2,左右子节点为2k和...
2018-05-30 14:38:37 343
原创 哈希算法初探
在java中,任何对象的HashCode()方法在默认情况下把对象物理地址先转成整数,再把整数计算Hash码,当然对于一些复杂的抽象数据类型也可以把自定义key转换成Hash码。 这里计算Hash码的过程就是哈希函数的工作,哈希函数在理想条件下要具有3个性质:1.确定性 2.便于计算 3.将key均匀映射散布。当然现实情况肯定不可能,那就要解决hash码冲突的问题。因...
2018-05-18 16:45:29 304
原创 数独问题暴力搜索
数独问题在leetcode中有36. Valid Sudoku和37. Sudoku Solver两道,数独规则有三条: 1.每一行数字在1-9不能重复。 2.每一列数字在1-9不能重复。 3.在所属特定的3*3邻域内的数字1-9不能重复。 37. Sudoku S...
2018-05-17 13:06:45 767
原创 Leetcode-129. Sum Root to Leaf Numbers
这是一道深度优先搜索(递归)的二叉树题目,题意简洁易懂。递归函数写之前尤其是构思的时候感觉比较乱,但是在真正写的时候,只要你的思维停在当前状态然后一步步向下,稀里糊涂就写出来了,并且十分简洁。好吧,直接上思路,见注释。 public static int sumNumbers(TreeNode root) { //递归终止条件不是空节点,也就是空节点不能进入递归函数,leetcode经常...
2018-05-08 14:01:23 176
原创 八皇后问题
八皇后问题规则:8*8棋盘上,棋子所在行、列、主对角线、副对角线方向没有棋子,最终摆满8个棋子。在棋盘问题上经常采用深度优先搜索来解决,搜索每前进一步都要判断位置的合法性,合法则继续向前搜索,不合法则后退到上一个位置,尝试上一个位置的其他方向。从棋盘行来看,每行(列)必然有一个棋子。我们可以逐列摆一个棋子,这样的话不存在两个棋子在同一列上,在设置三个全局变量用于记录棋盘的8、15条主对角线...
2018-05-07 12:39:47 338
原创 迷宫问题的递归和非递归解法
迷宫问题一般可以建模为一个二维数组,二维数组的值表示位置(i,j)是否可以通行,将位置数据结构设为每个格网的数据结构public class Loc { int row_idx; int col_idx; Loc pre; boolean pass; boolean visited; public Loc(int i,int j,Loc pre,boolean pass,...
2018-05-05 20:37:02 2739
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人