随笔分类 -  剑指offer

摘要:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 java: 阅读全文
posted @ 2019-02-28 22:31 __Meng 阅读(168) 评论(0) 推荐(0)
摘要:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 如果数组中只有一个不同的数,全都异或,有2个的话,想办法把这个数组分成2个子数组例如 4 0100 6 0110 异或后为0010,将第二位是1的数分在一个子数组里,其他数分在另一个子数组里,两个子数组 组 阅读全文
posted @ 2018-05-10 19:42 __Meng 阅读(221) 评论(0) 推荐(0)
摘要:输入一棵二叉树,判断该二叉树是否是平衡二叉树。平衡二叉树 每个结点的左右子树的深度相差不超过1 解法一:采用后序遍历的方式遍历整棵二叉树 只用遍历一次结点 C++: 阅读全文
posted @ 2018-05-10 18:54 __Meng 阅读(340) 评论(0) 推荐(0)
摘要:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 C++: 阅读全文
posted @ 2018-05-10 18:37 __Meng 阅读(154) 评论(0) 推荐(0)
摘要:统计一个数字在排序数组中出现的次数。 解法一:顺序遍历 O(n) 解法二:用二分的思想 找出第一个k 和最后一个k O(logn) C++: 阅读全文
posted @ 2018-05-10 18:15 __Meng 阅读(219) 评论(0) 推荐(0)
摘要:输入两个链表,找出它们的第一个公共结点。 C++: 遍历得到两个链表的长度,求出他们之差,用的长的链表先走若干步,接着在同时在两个链表 上遍历,找到的第一个相同的结点就是他们的共同的结点 C++: 阅读全文
posted @ 2018-05-10 16:41 __Meng 阅读(190) 评论(0) 推荐(0)
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 O(nlogn) 归并排序的思想 比如 5 7 4 6 5>4 那么比5大的数也会大于4所以 c 阅读全文
posted @ 2018-05-10 16:23 __Meng 阅读(149) 评论(0) 推荐(0)
摘要:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 C++: 字符出现0次,状态为00 字符出现1次,状态为10 字符出现2次及2次以上,状态为11 java: 阅读全文
posted @ 2018-05-10 15:35 __Meng 阅读(161) 评论(0) 推荐(0)
摘要:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7 。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数 Java: 阅读全文
posted @ 2018-05-08 16:02 __Meng 阅读(147) 评论(0) 推荐(0)
摘要:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 C++: java: 阅读全文
posted @ 2018-05-08 15:31 __Meng 阅读(148) 评论(0) 推荐(0)
摘要:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。 主要思路:设定整数点(如1、10、100等等)作为位置点i(对应n的各位、十位、百位等等),分别对每个数位上有多少包含1的点进行分析 //根据设定的整数位置,对n进行分割,分为两部分,高位n/i,低位n%i //当i表示百位,且百位对 阅读全文
posted @ 2018-05-07 18:14 __Meng 阅读(207) 评论(0) 推荐(0)
摘要:输入一个整型数组,数组里有正数也有负数,求所有子数组的和的最大值,要求时间复杂度为O(n) C++: 阅读全文
posted @ 2018-05-07 16:42 __Meng 阅读(137) 评论(0) 推荐(0)
摘要:输入n个整数,找出其最小的k个数,例如输入4,5,1,6,2,7,3,8,最小的4个数为1,2,3,4 解法一:快排思想,会改变原数组 O(n) 注意是vector<int>& C++: 解法二:维护一个大小为k的容器,每次将容器中最大的数字用小数字替换掉O(nlogk)如果有海量数据,没法一次放入 阅读全文
posted @ 2018-05-06 15:11 __Meng 阅读(214) 评论(0) 推荐(0)
摘要:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 C++: 阅读全文
posted @ 2018-05-04 19:57 __Meng 阅读(128) 评论(0) 推荐(0)
摘要:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 C++: 阅读全文
posted @ 2018-05-04 17:29 __Meng 阅读(162) 评论(0) 推荐(0)
摘要:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 C++: 阅读全文
posted @ 2018-05-04 16:37 __Meng 阅读(201) 评论(0) 推荐(0)
摘要:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。 C++: 阅读全文
posted @ 2018-05-04 16:06 __Meng 阅读(196) 评论(0) 推荐(0)
摘要:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 C++: 阅读全文
posted @ 2018-05-02 21:55 __Meng 阅读(182) 评论(0) 推荐(0)
摘要:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 C++: 阅读全文
posted @ 2018-04-27 17:59 __Meng 阅读(729) 评论(0) 推荐(0)
摘要:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 C++: 阅读全文
posted @ 2018-04-27 16:32 __Meng 阅读(130) 评论(0) 推荐(0)