算法和数据结构
文章平均质量分 65
圆圆的汤汤圆圆
无
展开
-
辗转相除算法原理
在学算法的过程中,总是以辗转相除算法求最大公约数开始。但是一直搞不懂辗转相除算法的原理,(表示很惭愧,还不如小学生),转载记录一下在中国古代就有一个很好的算法来计算a,b的最大公约数(a,b),称为辗转相除法,在西方称为Euclid算法。下面通过计算(1397,2413)来阐述这一算法。 首先,我们用这两个数1397和2413中两个数中小的去除大的,得商为1,余数为10转载 2015-07-31 10:07:42 · 6663 阅读 · 1 评论 -
剑指offer之包含min函数的栈
题目:自己实现一个栈,在o(1)时间内获得最小值,o(1)时间内push,pop。第一次看到这个题时,我的第一反应是没反应....第二反应是..... 获得最小值不应该遍历吗?怎么o(1)时间内完成。看了答案后,哦.....原来用辅助栈就能解决。后来再看到这道题时。嘿嘿,这道题我会02 解题首先回顾一下,栈结构:入口和出口都在...原创 2019-06-06 19:25:51 · 361 阅读 · 0 评论 -
剑指offer-重建二叉树
题目:输入某二叉树的前序和中序遍历结果,请重建该二叉树如二叉树前序遍历为 1,2,4,7,3,5,6,8中序遍历为 4,7,2,1,5,3,8,6前序遍历的特点:先遍历根节点,然后遍历左孩子节点,然后遍历右孩子节点。中序遍历的特点:先遍历左孩子节点,然后遍历根节点,最后遍历右孩子节点。解题过程前序遍历先遍历根节点,可以获取根节点的值,循环找到中序遍历的根节点的...原创 2019-06-02 09:56:12 · 114 阅读 · 0 评论 -
剑指offer-两个栈实现一个队列
题目:用两个栈实现一个队列,请实现它的两个函数add,remove,分别从队列尾部添加元素,和从队列头部移除元素。首先我们来回顾下栈和队列的特性,栈的特性是先进后出,即它只能通过一个口出入,如下图,队列的特性,先进先出,从队首出队,从对尾入队,如下图解题过程用两个栈来实现一个队列,根据栈和队列的特性,要解决的就是出队列的问题,解决过程如下图,我们称为 栈1和栈2...原创 2019-06-02 09:59:22 · 143 阅读 · 0 评论 -
循环实现二叉树的中序遍历
01 二叉树的中序遍历回顾中序遍历即父节点在中间遍历,遍历的顺序是左孩子,父节点,右孩子。对于整棵树来说,0是父节点,左边的树枝是左孩子节点,右边的树枝是右孩子节点。如下图所示。遍历过程如下:对于 0的整个左孩子树枝来说,又是一个父子结构, 3是左孩子节点,1是父节点,4是右孩子节点。他们的遍历顺序是3,1,4。遍历父节点,0对于0的整个右孩子树枝也类似。先...原创 2019-06-02 16:22:33 · 11246 阅读 · 2 评论 -
循环实现二叉树的后序遍历
01 二叉树的后序遍历回顾遍历顺序是左孩子节点,右孩子节点,根节点,遍历结果是 3,4,1,7,5,6,2,0如果你不理解树结构的遍历过程,可以这么想象下(1)0来说它的左孩子和右孩子分别是如下图:0的左孩子A 0的右孩子B左、右孩子又是一颗单独的树A,B(2)后续遍历A得:3,4,1(3)B的左子树,还可以再次拆分为CC(4)遍历C...原创 2019-06-02 18:02:40 · 2676 阅读 · 0 评论 -
动态图解算法面试题之栈的压入、弹出顺序
中间有动态图展示过程。01 题目描述输入两个整数序列,第一个序列表示栈的压入顺序,第二个表示栈的弹出顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如:序列1,2,3,4,5是栈的压入顺序,4,5,3,2,1是该栈的弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。02 解释1.入栈顺序 1,2,3,4,5。出栈顺序,...原创 2019-06-08 17:13:15 · 1822 阅读 · 0 评论 -
图解算法面试题之层序输出二叉树并输出行号-map实现
面试官:下面我们写些算法题吧小猫: 好的面试官:你实现一下,层序输出二叉树小猫:好的,刷刷刷写出来了。面试官:嗯.... 可以。你再写一个,层序输出并且输出行号。小猫内心:层序输出,并且输出行号,我平常学的时候,只学过层序输出....,哎呀,紧张......这个那个...... 最后挂了......小猫回去的路上镇定下来了,输出行号..... 好多种实现方式呢,我怎么当...原创 2019-06-15 18:19:10 · 450 阅读 · 0 评论 -
图解算法面试题之层序输出二叉树并输出行号-辅助变量实现
继上一篇图解算法面试题之层序输出二叉树并输出行号-map实现之后,继续进行第二种方式的实现。我们这次借助辅助变量,不需要多余的map结构来实现行号的输出。int curLineNumber = 0;// 当前正在打印的行 int curLineCount = 1;// 当前行的节点数量 int nextLineCount = 0;// 下一行的节点数量 01 解释思...原创 2019-06-15 18:21:36 · 353 阅读 · 4 评论 -
两个队列实现一个栈
本文参考书籍 《剑指offer》 作者何海涛题目:用两个队列实现一个栈,请实现它的两个函数push,pop,分别从栈尾部添加元素,和从栈尾部移除元素。首先我们来回顾下栈和队列的特性,栈的特性是先进后出,即它只能通过一个口出入,如下图,队列的特性,先进先出,从队首出队,从对尾入队,如下图解题思路每次需要出栈的时候,就将队列中的值移动到另外一...原创 2019-06-04 13:38:34 · 485 阅读 · 0 评论 -
算法面试题之二叉树的子结构
最近在刷剑指offer,把自己的理解写下来01 题目输入两颗二叉树 A和B,判断B是不是A的子结构如:ABB是A的子结构,B中的节点与A的孩子结构 2,5,6 完全对应。02 解题二叉树的每个结点最多有两个子树的树结构。通常左孩子节点,被称为左子树,右孩子节点也可以称为右子树。判断B是否为A的子树,即要对比B的树结构在A中是否存在,所以我们需要一个对比函...原创 2019-05-29 09:58:39 · 185 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数之前
本文参考书籍 《剑指offer》 作者何海涛01 题目输入一个整数数组,实现一个函数,调整数组中数值的顺序,使得所有奇数位于前半部分,所有偶数位于后半部分。如 1,2,3,4,5,6,7,8,9,10奇数和偶数内部顺序无特殊要求02 解题调整数组的顺序奇数位于前半部分,偶数位于后半部分。用start,end分别指向开头和结尾,start遇到奇数,end遇到偶数交换...原创 2019-05-31 18:10:13 · 151 阅读 · 0 评论 -
简单算法题之数值的正数次方
本文参考书籍 《剑指offer》 作者何海涛01 题目实现函数 double power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。02 解法一最简单直接的解法, 直接for循环相乘这种情况当输入的指数为<=0就没有办法处理,所以不可取03 解法二首先分析所有的可能...原创 2019-05-31 18:08:17 · 470 阅读 · 0 评论 -
java实现排序算法之2-路插入排序,直接插入排序,折半插入排序
package insert;import java.util.Arrays;/** * @author */public class InsertSort {public static void main(String[] args) {InsertSort sort = new InsertSort();int []a = new int[]{3原创 2015-08-18 16:18:53 · 591 阅读 · 0 评论 -
排序算法之2路归并排序(递归和非递归)
归并排序,从字面意思上理解,即合并的时候排序。归并排序是分治法的一种,首先将待排数列分成1个一个元素,然后依次按大小合并。排序过程分初始关键值 [49] [38] [65] [97] [76] [13] [27] 合 第一趟归并:(38,49) (65,97) (13,76) 27第三趟原创 2015-08-19 17:56:13 · 882 阅读 · 0 评论 -
java实现排序算法之堆排序
首先说一下堆的概念,堆分小顶堆和大顶堆。小顶堆,堆顶元素小于左子树及右子树上边的值,同时左右子树也是小顶堆,这样类推下去。同理大顶堆,就是堆顶元素大于左右子树所有元素,左右子树也分别是大顶堆。下边开始算法解释排序时每次将堆顶元素取走,将最后一个元素放在第一个元素的位置上,然后将剩下的i-1个元素重新调整为堆,依次类推。及排序过程就是不断的调整堆的过程。我们讨论顺序排序,数组原创 2015-08-19 17:35:32 · 421 阅读 · 0 评论 -
Java 组合的实现- 输入一个字符,输出字符中字母组成的所有组合
今天遇到的笔试题,时间紧张没有想出来。笔试完后总结一下解决方法。题目如下:给出一个字符串例如:”abc“,输出组成该字符的字母组成的所有组合。上例:a,b,c,ab,ac,bc,abc;以abcde为例来解释,abc的组合的元素个数从1-5个;分别为a b c d e ab ac ad ae bc bd be cd ce abc abd abe acd ace ade bcd bc原创 2015-10-11 23:29:05 · 5273 阅读 · 0 评论 -
红黑树
转载 : http://blog.csdn.net/silangquan/article/details/18655795 连续两次面试都问到了红黑树,关键两次都没有答好,这次就完整地来学习整理一下。没有学习过红黑树的同学请参考:> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structu转载 2017-02-10 10:01:03 · 260 阅读 · 0 评论 -
java实现组合-n个数取其中k个数的所有组合
n个数取其中k个数的所有组合java实现组合,假设一组数{1,2,3,4,5,6,7,8} ,n = 8 k = 4;那么首先取第一个1,然后在剩下7个里面去第二个数,比如2,然后第三个在剩下的六个数中选择一个数。依次类推原创 2017-03-16 14:48:42 · 16647 阅读 · 0 评论 -
图解循环实现二叉树的前序遍历
01 二叉树的前序遍历回顾我们知道,二叉树有三类节点,父节点,左孩子节点,右孩子节点。前序遍历的意思就是先遍历父节点,之后左孩子节点,右孩子节点。补充:中序和后序遍历都是针对父节点的说法,父节点中间遍历,父节点最后遍历。左右孩子节点的便利顺序大体上不变。02 图解遍历过程如果已经了解前序遍历的过程,可以跳过这个部分。(1)如下图,遍历节点0(2)如下图,...原创 2019-05-30 22:12:30 · 3182 阅读 · 0 评论 -
图解算法面试题之打印1到最大的N位数
本文参考书籍 《剑指offer》 作者何海涛在面试中经常遇到大数相加问题,所以需要自己需要好好练习下这类型的题目。01 题目输入数字n,按顺序打印出从1到最大的n位十进制数。示例:比如输入3,则打印1,2,3 一直到最大的3位数即99902 解法1这道题第一反应是,求出输入数字n对应的十进制数,如4,则计算出10000,然后for循环输出1到 10000。所以形成了解法...原创 2019-05-31 18:04:58 · 224 阅读 · 0 评论 -
算法题之在O(1)时间内删除链表结点
本文参考书籍 《剑指offer》 作者何海涛01 题目给定一个单向链表的头节点和一个指针节点,定义一个函数在o(1)时间内删除该节点。链表节点和函数节点的定义如下:注意给的待删除结点是链表中的一个指针节点02 解题因为给的结点是链表中的节点,我们很容易想到把下一个节点的数值复制到当前节点,然后把指针指向下下一个节点,这样就完成了O(1)时间内操作删除节点...原创 2019-05-31 18:06:37 · 614 阅读 · 0 评论 -
剑指offer-层序打印二叉树
01 题目给一个二叉树,从上到下按照层序打印二叉树。如层序遍历结果位 1,2,3,4,5,6,7,802 解题&动图展示用辅助队列完成。根节点首先到队列里面排队,等待输出。根节点被输出,将根节点的子孩子入队排队等待输出。红色为已经入队的元素文字描述过程1.将跟节点1,放入队列中。队列:1。输出元素:2.删除队首元素1,并输出...原创 2019-06-11 21:56:50 · 352 阅读 · 0 评论