【DP】礼物的最大价值

面试题47:礼物的最大价值 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 之前Pytho...

2018-09-28 21:47:59

阅读数 129

评论数 0

【DP】把数字翻译成字符串

面试题46:把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mz...

2018-09-13 20:40:20

阅读数 147

评论数 0

【算法】数字序列中某一位的数字,把数组排成最小的数

面试题44:数字序列中某一位的数字 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。 每次跳过一片数字海,每个数字海都是位数一样的数字组成的,这...

2018-09-13 20:08:40

阅读数 92

评论数 0

【递归】从1到n整数中1出现的次数

面试题43:从1到n整数中1出现的次数 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。 给定一个数字,如1~21345,可以从最高位拆开分成1~1345和1346~21345这两...

2018-09-13 16:01:14

阅读数 89

评论数 0

【DP】连续子数组的最大和

面试题42:连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 ...

2018-09-12 09:54:35

阅读数 111

评论数 0

【大小堆】数据流中的中位数

面试题41:数据流中的中位数 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 书上214~216页的分析非常精彩,感觉再总结些什么都是东施效颦了。...

2018-09-11 21:19:31

阅读数 134

评论数 0

【算法】最小的k个数

面试题40:最小的k个数 输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 解法1 还是用Partition函数,存在这样的划分,正好取到第k小的数字为基准数,能够使比其小的数字都在其左边,就找到了最小的k个数。...

2018-09-11 20:05:34

阅读数 181

评论数 0

【算法】数组中出现次数超过一半的数字

面试题39:数组中超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 解法1 数字超出一半,随机选中该数字的概率...

2018-09-11 19:11:27

阅读数 492

评论数 1

【分治法】字符串的排列与其变式题

面试题38:字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 把第一个字符和后面所有字符交换,则第一个位置可以出现所有种字符。其中又将该字符固定,重复这个...

2018-09-11 14:41:22

阅读数 125

评论数 0

【DLR】序列化二叉树

面试题37:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。 前序、中序、后序三种遍历,任意一个都不能唯一确定一颗二叉树。可以用中序遍历序列和另外两个里的任意一个来确定(用前和后不能唯一确定),但是这样也必须要所有数据都读出来。 如果序列化从根开始,那么反序列化在根节点...

2018-09-11 10:17:58

阅读数 140

评论数 0

【LDR】BST转双向链表

这题书上讲的思路很清楚,不过代码里细节太多了。理解完感觉还是和书上讲的有差距的。 面试题36:二叉搜索树转排序双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 中序遍历BST,就是从小到大遍历BST的每个结点...

2018-09-10 15:14:55

阅读数 88

评论数 0

【复杂链表】复杂链表的复制

面试题35:复杂链表的复制 书上有图,不再画了。 请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling 指向链表中的任意结...

2018-09-10 13:18:53

阅读数 117

评论数 0

【LRD,DLR】BST的后续遍历序列,二叉树中和为某一值的路径

D是Degree,后续遍历就是LRD,前序遍历就是DLR。 面试题33:BST的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 后序遍历是左右中,而根据BST的特性,...

2018-09-10 10:45:55

阅读数 123

评论数 0

【BFS】分行层序打印二叉树,分行层序之字形打印二叉树

面试题32-2:分行层序打印二叉树 从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。 分行打印,用两个变量一个指示当前行结点数,一个指示下一行结点数。在队列里入栈和出栈时就能维护了。当前行走到0就打完了一行,换行把下一行拿上来。 #include&...

2018-09-10 08:59:59

阅读数 110

评论数 0

【算法】栈的压入、弹出序列,从上到下打印二叉树

面试题31:栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出...

2018-09-09 19:31:56

阅读数 60

评论数 0

【同步栈】包含min函数的栈

面试题30:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 为数据栈设置一个同push同pop的同步栈,记录当前状态下栈中的最小元素。插入新的元素时,只要用O(1)时间取得同步...

2018-09-09 18:37:52

阅读数 46

评论数 0

【算法】顺时针打印矩阵

面试题29:顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 要想到能一圈一圈的打印,每一圈就是从左到右,再从上到下,再从右到左,再从下到上。每次打印完更新圈的左上角点。剩下的就是找规律,确定边界条件,画图分析起来方便。 最后就是整个矩阵打印完的标识,左...

2018-09-09 16:23:34

阅读数 158

评论数 0

【二叉树】二叉树的镜像,对称的二叉树

继续注解《剑指Offer》算法代码,现在是第四章。 面试题27:二叉树的镜像 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 书上这章节的意图在画图理解并解决问题,本题就是所有结点的左右子树交换一下。 #include<bits/stdc++.h&...

2018-09-09 15:40:35

阅读数 264

评论数 0

【二叉树】二叉树的子结构

面试题26:二叉树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。树的结点里存的是double类型的值。 如果树A根和树B根相同,只要判断树B是不是树A的残疾子树,这个可以单独拿到一个递归函数里。如果不相同,再递归地调用解决问题的函数,判断树A的左子树和树A的右子树。 在外层...

2018-09-06 15:06:02

阅读数 57

评论数 0

【算法】反转链表,合并两个排序的链表

面试题24:反转链表 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 遍历时将结点的next指向前一个结点即可,注意把没反转的子链的头结点记录下来,防止内存泄露。 #include<bits/stdc++.h&a...

2018-09-06 14:15:26

阅读数 54

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭