
剑指OFFER
一个秃头程序小哥
这个作者很懒,什么都没留下…
展开
-
二叉树的镜像(剑指OFFER 面试题27)
问题描述二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...原创 2018-06-21 09:40:38 · 293 阅读 · 0 评论 -
1~n整数中1出现的次数
题目描述        最直观的方法肯定是,累加1~n中每个整数1出现的次数,我们可以通过对10求余数判断整数的个位数字是不是1 。如果这个数字大于10,则除以10之后再判断个位数字是不是1 。基于这种思想,我们可以得出以下代码:class Solution1{ /// &原创 2018-07-03 22:22:53 · 766 阅读 · 2 评论 -
数字序列中某一位的数字
题目描述 数字以01234567891011121314…的格式序列化到一个字符序列中。在这个序列中,第5位是5(从0开始),第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。 &a原创 2018-07-04 11:42:29 · 495 阅读 · 0 评论 -
字符串的排列及解决思路的总结
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路我们可以向前面的几个问题一样,先把问题分解成多个小问题再一一解决,比如:我们把一个字符串看成由两部分组成:第一部...原创 2018-06-29 10:36:25 · 493 阅读 · 0 评论 -
剑指OFFER第45题——把数组排成最小的数qq_33575542
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 &nbs原创 2018-07-04 22:23:09 · 190 阅读 · 0 评论 -
第一个只出现一次的字符
题目一:        在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出“b”。   &am原创 2018-07-23 15:14:15 · 1299 阅读 · 0 评论 -
把数字翻译成字符串
题目描述        给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成‘a’,1翻译成‘b’,……,11翻译成‘l’,……,25翻译成‘z’。一个数值可能翻译成多个字符串。例如:12258有5种不同的翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”、“mzi”。请编程实原创 2018-07-05 15:30:06 · 1075 阅读 · 0 评论 -
礼物的最大价值
题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设,字符串中只包含‘a-z’的字符。例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4 。 原创 2018-07-06 22:51:47 · 284 阅读 · 0 评论 -
剑指OFFER第49题——丑数
问题描述        我们把只包含2、3、5的数称作丑数(Ugly Number)。实现一个函数求从小大到的顺序的第n个丑数。例如,6、8都是丑数,但是14就不是,因为它包含了因子7 。习惯上我们把1当作第一个丑数。方法一:   &am原创 2018-07-07 17:23:58 · 276 阅读 · 0 评论 -
数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如:在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,5},{7,4},{7,6},{5,4},{6,4}。 &n...原创 2018-07-25 13:34:31 · 964 阅读 · 0 评论 -
二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。方法一: 最直观的方法,就是把这个数转变为二进制,然后判断最小位位是否为1,然后把数字往右移一位,这样右边原创 2018-07-15 16:45:29 · 4675 阅读 · 3 评论 -
连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长...原创 2018-07-03 10:44:42 · 163 阅读 · 0 评论 -
数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。由于数据是从一个数据流中读出来,因而数据的数目随着时间的增加而增加,如果用一个数据容器来保存从流中读出来的数据,则当新的数据从流中读出来的时候,这些数据就插入数据容器。这个数据用什么数据结构...原创 2018-07-02 11:28:58 · 4457 阅读 · 5 评论 -
表示数值的字符串
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。题解: 例如:.210等于0.210.因此A不是必须的。如果一个数没有整数部分,那么它的小数部分不能为空。 ...原创 2018-06-18 10:44:40 · 206 阅读 · 0 评论 -
对称的二叉树(剑指OFFER 面试题28)
问题描述以下三个二叉树,除了第一个二叉树A是对称的之外,后面两个B、C都不是对称二叉树。二叉树A 二叉树B 二叉树C 我们遍历二叉树通常有三种算法,前序中序和后序。在这3中遍历算法中,都是先遍历右子节点再遍历左子节点。那么我们可以换种思路,定义一个算法用来先遍历右子节点再遍历左子节点,比如:我们针对前序遍历,定义一个对称的遍历算法,先遍历父节点,再遍历它的右子节点,最后遍...原创 2018-06-21 16:07:20 · 236 阅读 · 0 评论 -
顺时针打印矩阵(剑指OFFER 面试题29)
问题描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 由于是以外圈到内圈的顺序依次打印,所以我们可以把矩阵想象成若干个圈,这样...原创 2018-06-21 21:19:23 · 133 阅读 · 0 评论 -
栈的面试题
面试题30 包含min函数的栈题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调动min、push、及pop的时间复杂度都是O(1)。为了保证当我们弹出当前最小元素后,下一个最小元素也能够立即得出。因此我们可以把每次的最小元素放到另一个辅助栈中。以下列例子为例:首先往空栈里压入数字3,显然3是当前最小值,把3也压入辅助栈中。接下来压入4,发现...原创 2018-06-22 20:46:40 · 551 阅读 · 0 评论 -
从上到下打印二叉树
问题描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。看到这个问题,第一脑海里就浮现出了数据结构期间学到的树的广度遍历,那么按照当时的思路,就是建立一个队列(因为队列有先进先出的性质),从第一个根节点开始,把根节点储存进队列中,然后判断队列是否为空,不为空则打印该节点,然后判断该节点的左右子树是否为空,不为空,把它的左右子树添加进队列中,以此类推,直到最后把所有不为空的节点全部输出...原创 2018-06-23 11:18:38 · 568 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。在这里小鸿为大家科普一下什么是二叉搜索树; 二叉搜索树,也叫二叉排序树、二叉查找树或BST(Binary Search Tree)。二叉搜索树或是一棵空疏,或者是一棵具有下列特性的非空二叉树: 1. 若左子树非空,则左子树上的所有节点的关键字...原创 2018-06-23 20:17:57 · 227 阅读 · 0 评论 -
(剑指OFFER面试题34)二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 例如下图,输入的二叉树和整数22,则打印出两条路径,第一条路径包含节点10、12;第二条路径包含节点10、5和7 。 一般的数据结构和算法的教材都很少介绍树的路径,因此,理解有点麻烦,大家可以想到哈弗曼树的权值,有点类似。 以上图的树来...原创 2018-06-24 16:58:55 · 2409 阅读 · 3 评论 -
数组中出现次数抄过一半的数字
问题描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路看到这个问题第一想法就是排序然后统计数字的出现次数就好了,题目给出的数组没有说是排序的,因此我们需要给他排序,时间复杂度为O(N*logN)。但是,最直观的算法通...原创 2018-06-29 20:15:38 · 127 阅读 · 0 评论 -
复杂链表的复制(剑指OFFER面试题35)
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 节点的定义如下:public class RandomListNode{ public int label; public RandomList...原创 2018-06-25 15:37:53 · 188 阅读 · 0 评论 -
二叉搜索树与双向链表(剑指OFFER 面试题36)
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路在二叉树中,每个节点都有两个指向子节点的指针。在双向链表中,每个节点也有两个指针,分别一个指向前一个指向后。由于这两种结构相似,同时二叉搜索树也是一中排序的数据结构,因此,理论上可以实现搜索二叉树和双向链表的转换。 在搜索二叉树中,左子节点的值总是小于父节...原创 2018-06-25 22:57:13 · 131 阅读 · 0 评论 -
最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,这道题最简单的思路就是把数组排好序,然后取前面的k个数就好了,但是这种算法的时间复杂度为O(N*logN),所以我们需要利用更快的方法来解决这个问题。解法一:时间复杂度为O(N)的算法,只有当我们可以修改数组的时候才可以用 基于快排的思想,如果基于数组的...原创 2018-06-30 21:02:33 · 175 阅读 · 0 评论 -
序列化二叉树(剑指OFFER 面试题37)
题目描述请实现两个函数,分别用来序列化和反序列化二叉树。思路看到这个题,“反序列化二叉树”,就想起了前面解决的面试题“重建二叉树”,从前序遍历序列和中序遍历序列中构造一个二叉树。受此启发,可以先把一个二叉树序列化成一个前序遍历序列和一个中序遍历序列,然后在反序列化时通过这两个序列就能重构出二叉树了。但是,从上述思路可以看出,该方法有两个缺陷: 1、该方法要求二叉树不能有数值重复的...原创 2018-06-26 15:21:25 · 181 阅读 · 0 评论 -
两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共节点,链表结点定义如下:public class ListNode{ public int val; public ListNode next; public ListNode (int x) { val = x; }}总共三种解法:方法一,蛮力法 &nb...原创 2018-07-26 18:17:05 · 527 阅读 · 0 评论