算法/数据结构
星河arnold
还有很多事要做,怎能就此停滞不前。 全平台同名
展开
-
JDK11版HashMap源码全部解析(详细)-一文覆盖各方面
本文很长,详细描述了HashMap源码级别的实现原理,并讨论了包括扩容,hash计算,新建HashMap的开销等问题,同时还提供了一些外部资料。由于内容太多,建议阅读时结合目录快速跳转查看。原创 2019-05-11 16:18:32 · 2893 阅读 · 0 评论 -
层序遍历时划分每层-Leetcode 429. N叉树的层序遍历-java版
如何在层序遍历n叉树时,将每层元素分开?本文通过广度优先搜索(BFS)的方式解决这个问题。其实DFS也是可以的。原创 2019-07-16 19:27:35 · 364 阅读 · 0 评论 -
快速排序的原理及其实现(C++及Java版)浅析
快速排序原理基于二分的思想,先随机选定一个基准数(比如最左边的),然后从一个指针从最右边找比基准数小的数,一个指针从最左边找比基准数大的数,然后两数交换位置,重复找并交换的过程,最终在两个指正相碰时,该位置就是基准数在最终排好序时的结果,将基准数和该位置上的数交换位置,即可。然后根据基准数的位置二分,在两边依次使用快速排序。终止条件:划分到只有1或0个元素时即可终止。为什么该位置是基准数在最...原创 2019-08-20 14:46:45 · 133 阅读 · 0 评论 -
剑指offer-重建二叉树-Java版题解
概述本题来自牛客网-剑指offer在线测评原理与实现思想:二分、递归关键是:利用前序序列根节点在前找到根节点,用根节点去中序序列划分成两部分,左部分是左子树,右部分是右子树。再利用子树长度去前序序列把前序序列中的左右子树找出来,同时可以找出根节点。递归进行此步骤,如果子树长度为0,则不需要生成子问题。class TreeNode { int val; TreeNode l...原创 2019-08-23 09:53:17 · 198 阅读 · 0 评论 -
剑指offer-二维数组查找题解-本质与实现
概述从左下开始找。本质是利用:有序序列中最小的元素比target(目标元素)大,那么target必然不在此序列中。因此也可以从右上找。题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。原理从左下开始找。左下的那个元素m有如下性质:这一...原创 2019-08-24 15:35:25 · 222 阅读 · 0 评论 -
全排列算法本质与实现
本质解决全排列问题本质是:二分法。将某个数组的全排列看成是由第0个元素与其后所有元素的全排列组成。做法是每次只需要挑选某个元素作为当前排列的第0个元素,然后剩下的变成子问题递归来解决。原理设一个数组的长度为n,则其全排列的个数为n!个。设f(n)代表对于一个n长度数组的全排列,array(n)代表数组中的第n个元素,+代表拼接。f(n) = array(1 to n) + f(n -...原创 2019-08-25 16:35:16 · 195 阅读 · 0 评论 -
如何打乱一个数组--数组shuffle实现及常见错误
定义打乱:对于一个数,它随机跟其它位置或其本身位置交换定义一个数组的打乱:数组中每一个数都被打乱成为数组的打乱import java.util.Random;/** * 参考自Java Collection源码 * 定义打乱:对于一个数,它随机跟其它位置或其本身位置交换 * 定义一个数组的打乱:数组中每一个数都被打乱成为数组的打乱 */class Shuffle { pu...原创 2019-08-22 19:29:31 · 848 阅读 · 0 评论