算法基础
问而知
向Java提问,探寻代码内含的意蕴
展开
-
一:七大基础排序算法
一、冒泡排序二、选择排序三、插入排序四、归并排序五、快速排序六、希尔排序七、堆排序原创 2019-04-28 14:55:04 · 151 阅读 · 0 评论 -
二:常用树的概念与区别
满二叉树一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。完全二叉树二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。堆的本质就是一棵完全二叉树(大根堆:树中任意一个子树的最大...原创 2019-04-28 14:55:57 · 201 阅读 · 0 评论 -
三:堆排序详解
X(大或小)根堆的构建:堆的本质就是一棵完全二叉树(大根堆:树中任意一个子树的最大值都是它的头部组成的树)一个大根堆或者小根堆,它的创建过程:参考完全二叉树父子节点之间的关系(父节点为i,则左孩子为2*i+1,右孩子为2*i+2),就可以对数组进行构建,通过对数组元素的移动,来达成大根堆的构建。比如数组[3, 1, 2, 5, 0],构建一个小根堆相关的时间复杂度:新添...原创 2019-04-28 14:56:55 · 175 阅读 · 0 评论 -
四:master公式
master公式的使用T(N) = a*T(N/b) + O(N^d)1) log(b,a) > d -> 复杂度为O(N^log(b,a))2) log(b,a) = d -> 复杂度为O(N^d * logN)3) log(b,a) < d -> 复杂度为O(N^d) a是分组后,运用到递归操作的样本的操作次数b是总样本量分...原创 2019-04-28 14:58:04 · 266 阅读 · 0 评论 -
五:关于递归需要返回多个信息
输入一棵二叉树,判断该二叉树是否是平衡二叉树。这道题在递归的时候需要返回两个信息,第一个是否是平衡二叉树,第二个是它的高度遇到这种题可以将它需要的这些信息封装成一个对象,返回值也是这个对象,就能够通过递归快速写代码来实现了...原创 2019-04-28 14:58:45 · 749 阅读 · 0 评论 -
六:关于冒泡排序的三种实现方式
我们知道一般的冒泡排序是指:1、将一个数与它后面的那一个数进行比较,如果前面>后面,则两者交换位置。2、对数组中的每一个数都进行这样的操作,一个循环下来最大的数值就会到达数组的最后面。3、再将数组范围缩小一个(即再次比较时不看数组最后且最大的那个),再次循环上面的步骤。(因为1,2,3,6,1在12循环后是1,2,3,1,6 如果不继续进行循环,则答案错误)当数组的...原创 2019-04-28 15:01:09 · 745 阅读 · 0 评论 -
七:几种常见排序算法的时间复杂度
原创 2019-04-28 15:01:37 · 985 阅读 · 0 评论 -
八:求两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。一般的思路是找出两个链表长度的差值,然后长的先跑完差值,最后和着短的链表一起跑,这样必然能够来到第一个公共结点但是这里有个问题,就是不能够保证这个链表是无环的,如果有环的话,在判断链表长度差值的时候,因为一直不能得到null,所以会陷入死循环。所以可以先判断是否有环,这个的判断可以通过两种方式,第一种是hashmap或者hashset的...原创 2019-04-28 15:02:23 · 125 阅读 · 0 评论