
算法
文章平均质量分 66
傅-圣
技术向轮子哥看齐,产品向张小龙看齐
展开
-
字符串匹配的KMP算法
今天我们来聊聊kmp模式匹配算法。转载 2017-11-21 16:48:32 · 142 阅读 · 0 评论 -
《剑指offer》(面试题27):二叉搜索树与双向链表
前言在计算机领域有一类算法叫分治法,即“分而治之”。采用的就是各个击破的思想,我们把分解后的小问题各个解决,然后把小问题的解决方案结合起来解决大问题。题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路哇偶,中序遍历啊!中序遍历,递归和循环都可以撒~二叉搜索树是一种排序转载 2018-02-02 18:37:44 · 240 阅读 · 0 评论 -
《剑指offer》(面试题24):二叉搜索树的后序遍历序列
前言:当一眼看不出问题中隐藏的规律时,我们可以试着用一两个具体的例子模拟操作的过程,说不定这样那就能通过具体的例子找到抽象的规律。题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路深度优先遍历中的先序遍历、中序遍历、后序遍历,都是针对在遍历中根结点的位转载 2018-02-02 18:12:34 · 231 阅读 · 0 评论 -
《剑指offer》(面试题23):从上往下打印二叉树
前言:当一眼看不出问题中隐藏的规律时,我们可以试着用一两个具体的例子模拟操作的过程,说不定这样那就能通过具体的例子找到抽象的规律。题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路再熟悉不过的层序遍历,BFS即可实现。用队列来进行层序遍历,同时用一个vector容器来存储每一层的值。举例如下:python 代码转载 2018-02-02 17:55:40 · 237 阅读 · 0 评论 -
《剑指offer》(面试题21):包含min函数的栈
前言:当一眼看不出问题中隐藏的规律的时候,我们可以试着用一两个例子模拟操作的过程,这样说不定就能通过具体的例子找到抽象的规律。可以举出一两个例子,告诉面试官问的算法是怎么一步步处理这个例子的。模拟压栈和弹出几个数字,分析每次操作之后数据栈,辅助栈和最小值是什么?怎么检查代码呢?可以运行几个测试用例。题目描述定义栈的数据结构,请在该类型转载 2018-02-02 17:44:01 · 211 阅读 · 0 评论 -
(未完成)《剑指offer》(面试题18):树的子结构
在面试的时候,我们一定要注意边界条件的检查,即检查空指针。当树 A 或树 B 为空的时候,定义相应的输出。可以分成两步:第一步在树 A 中找到和 B 的根结点的值一样的结点 R,第二步再判断树 A 中以 R 为根节点的子树是不是包含和树 B 一样的结构。原创 2018-02-01 22:46:48 · 161 阅读 · 0 评论 -
《剑指offer》(面试题17):合并两个排序的链表
在面试过程中,最容易犯两种错误:一是在写代码之前没有对合并的过程想清楚,最终合并出来的链表要么中间断开了要么并没有做到递增排序;二是代码在鲁棒性方面存在问题,程序一旦有特殊的输入(如空链表)就会崩溃。题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路递归:新创建一个指针就可以,比较两个链表的值,然后做相应转载 2018-02-01 22:20:06 · 174 阅读 · 0 评论 -
(未完成)《剑指offer》(面试题16):反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。以这道题为例,我们至少应该想到几类测试用例对代码做功能测试:输入的链表头指针是 NULL。输入的链表只有一个结点。输入的链表有多个结点。原创 2018-02-01 20:54:13 · 191 阅读 · 0 评论 -
《剑指offer》(面试题15):链表中倒数第k个结点
代码的鲁棒性(robust)提高代码的鲁棒性的有效途径是进行防御性编程。其实也是一种编程习惯,是指预见在什么地方可能会出现问题,并为这些可能出现的问题制定处理方式。比如试图打开文件时发现文件不存在,我们可以提示用户检查文件名和路径;在面试时,最简单的防御性编程就是在函数入口添加代码已验证用户输入是否符合要求。我们需要格外关注这些函数的输入参数。如果输入的是一个指针,那指针是转载 2018-02-01 20:32:00 · 145 阅读 · 0 评论 -
《剑指offer》(面试题14):调整数组顺序使奇数位于偶数前面
总结:考虑可扩展性的解法,能秒杀 offer面试官期待我们提供的不仅仅是解决一个问题的办法,而是解决一系列同类型问题的通用办法。这就是面试官在考查我们对扩展性的理解。题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路方法一原创 2018-02-01 20:05:48 · 205 阅读 · 0 评论 -
《剑指offer》(面试题13):在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在 O(1)时间删除该结点。之所以需要从头开始查找,是因为我们需要得到将删除的结点的前面一个结点。在单向链表中,结点中没有指向前一个结点的指针,所以只好从链表的头结点开始顺序查找。我们可以很方便地得到要删除的结点的下一结点。如果我们把下一结点的内容复制到需要删除的结点上覆盖原有的内容,再把下一个结点删除,那是不是就相当于原创 2018-02-01 18:35:27 · 246 阅读 · 0 评论 -
《剑指offer》(面试题11):数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路方法一:公式求解我们知道当指数为负数的时候,可以先对指针求绝对值,然后算出次方的结果之后再取倒数。如果要自己实现,那么就需要考虑各种错误处理和边界问题。比如,既然有求倒数,对0求倒数怎么办,当底数是0且指数是负数的时候,如果不做特殊处理,就会原创 2018-02-01 18:08:22 · 190 阅读 · 0 评论 -
《剑指offer》(面试题9):斐波那契数列
前言如果我们需要重复地多次计算相同的问题,通常可以选择用递归或者循环两种不同的方法。递归式在一个函数的内部调用这个函数自身。而循环则是通过设置计算的初始值及终止条件,在一个范围内重复运算。通常递归的代码会比较简洁。在面试的时候,如果面试官没有特别的要求,应聘者可以尽量多采用递归。递归虽然有简介的优点,但它同时也有显著的缺点,那就是时间和空间的消耗:每一次函数调用,都需要原创 2018-01-31 11:00:43 · 283 阅读 · 0 评论 -
(未完成)《剑指offer》(面试题8):旋转数组的最小数字
其中排序和查找是面试时考察算法的重点。在准备面试的时候,我们应该重点掌握二分查找,归并排序和快速排序,做到能随时正确,完整地写出他们的代码。如果面试题是要求在排序的数组(或者部分排序的数组)中查找一个数字或者统计某个数字出现的次数,我们都可以尝试用二分查找算法。查找相对而言较为简单,不外乎顺序查找,二分查找,哈希表查找和二叉排序树查找。排序比查找要复杂一些。原创 2018-01-31 10:50:02 · 271 阅读 · 0 评论 -
算法之选择排序算法
今天来聊聊选择排序算法。定义:思想是:首先在未排序的数列中找到最小元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推。python 代码如下:def selectionSort(alist): for fillslot in range(len(alist)-1,0,-1):原创 2017-11-09 08:30:20 · 186 阅读 · 0 评论 -
算法之冒泡排序
今天我们要讲的是冒泡排序,打算把算法的内容都写成博客的形式。冒泡排序(Bubble Sort):它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序原创 2017-11-08 21:03:33 · 242 阅读 · 0 评论 -
Bitmap 算法
今天我们来聊聊 Bitmap 算法为满足用户标签的统计需求,小灰利用Mysql设计了如下的表结构,每一个维度的标签都对应着Mysql表的一列:要想统计所有90后的程序员该怎么做呢?用一条求交集的SQL语句即可:Select count(distinct Name) as 用户数 from table whare原创 2017-12-11 15:34:14 · 438 阅读 · 0 评论 -
《剑指offer》(面试题34):丑数
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路同样的,我们首先想到的可能就是遍历判断,但是每个数都要计算一次是不是ugly,很是麻烦。于是我们想,能不能只对ugly进行计算呢,显然是可以的。我们用一个数组来从小到大存转载 2018-02-03 11:49:32 · 372 阅读 · 0 评论