算法
文章平均质量分 79
请叫我益达张
这个作者很懒,什么都没留下…
展开
-
排序算法之堆排序
基础概念 完全二叉树 完全二叉树(Complete Binary Tree):若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 堆 堆总是满足以下两个特性: 堆是一棵完全二叉树。 堆中每个结点的值总是不大于(或不小于)其子结点的值。 其中,每个结点的值总是不大于其子结点的值原创 2018-01-31 15:45:30 · 785 阅读 · 3 评论 -
剑指offer面试题8-旋转数组的最小数字
问题描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3, 4, 5, 1, 2}为数组{1, 2, 3, 4, 5}的一个旋转,该数组最小值为1。 解决思路 最简单的解决方法不过就是把数组遍历一遍,但是这种方式是一个时间复杂度为O(n)的算法,而且这个算法没有利用旋转数组的特性,不是最优解原创 2018-01-31 15:40:43 · 296 阅读 · 0 评论 -
剑指offer面试题9-斐波那契数列问题
问题描述 写一个函数,输入n,求斐波那契(Fibonacci)数列第n项。 斐波那契数列定义为:f(n) = f(n-1) + f(n-2) (n>1) ,其中f(0)=0, f(1)=1。 递归解法 斐波那契数列是一个典型的递归解法,代码如下: public int Fibonacci(int n) { if (n == 0) { return 0;原创 2018-01-31 15:37:13 · 285 阅读 · 0 评论 -
剑指offer面试题3-二维数组查找问题
问题描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 暴力破解 暴力破解方式也就是对二维数组中的每个元素逐个检查,结束条件为找到和目标值相等的元素或者查询到最后一个元素。 对于一个行列数都为n的二维数组而言,最坏的情况是将整个数组遍历完,这种情原创 2018-01-31 15:31:33 · 310 阅读 · 0 评论 -
剑指offer面试题10-二进制中1的个数
问题描述 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。 例如把9的二进制是1001,有2位是1。因此,如果输入9,该函数输出2。 解决算法 算法一 根据题目,我们可以想到先判断最低位是否为1,然后将次高位右移一位,然后在判断最低位是否为1,通过不断右移直到最高位右移到最低位时就可判断出每一位的情况,就得到了有多少位是1。那么问题就来了,如和判断最低位是否为1。原创 2018-01-31 15:39:42 · 416 阅读 · 0 评论