随笔分类 -  剑指offer读书笔记

摘要:题目:输入两个链表,找出它们的第一个公共结点,链表结点的定义如下:1 struct ListNode2 {3 int m_nKey;4 ListNode* m_pNext; 5 }一共三种方法解答此题目:方法1:双层遍历链表,复杂度为O(m*n)方法2:有两个栈存储链表... 阅读全文
posted @ 2015-09-02 17:48 vpoet 阅读(378) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字中1,10,11和12,1一共出现了5次本题可以直接变量1到n的n个数然后分别计算每个数中1的个数,然而这种方法是效率很低下的书上给出了一共方法,去找数n各个位置上出现1的规律,在这里... 阅读全文
posted @ 2015-09-02 17:03 vpoet 阅读(452) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个整型数组,数组里有正数也有负数。数组中一个或者连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度O(n)本题可以把所有子数组全部找出来再求其和的最大值便可以得出,但是这样会导致算法的时间复杂度为0(n^2),所以有两种方法来解决这个问题。方法1.数组扫描我们扫描一遍数... 阅读全文
posted @ 2015-09-01 15:45 vpoet 阅读(701) 评论(0) 推荐(0) 编辑
摘要:题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8这8个数字,则最小的四个数字为1,2,3,4,这道题是典型的TopK问题,剑指Offer提供了两种方法来实现,一种方法是parition方法,一种方法是建立一个大小为k的堆进行topk求解这里我们只解释第一种方法:1.首... 阅读全文
posted @ 2015-08-30 17:05 vpoet 阅读(263) 评论(0) 推荐(0) 编辑
摘要:题目:数组中有一个数字出现的次数超过数组长度的一半,请找出整个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在整个数组中出现5次,超过数组长度的一半,输出2.此题的解法有很多种,剑指offer书中提出了两种,一种是Parition的方法,另外一种是计数的方法。这里... 阅读全文
posted @ 2015-08-30 15:56 vpoet 阅读(266) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba.此题的主要步骤由如下几步:1.求出所有可能出现在第一个位置的字符2.将第一个字符与后面字符分别交换3.将第一个字符后面的字符递归... 阅读全文
posted @ 2015-08-30 15:27 vpoet 阅读(261) 评论(1) 推荐(0) 编辑
摘要:题目:输入一颗二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求不能创建任何新的结点,只能调整树种结点指针的指向。比如输入下图的二叉搜索树,则输出转换后的双向排序链表。1 102 / \3 6 144 /... 阅读全文
posted @ 2015-08-30 14:48 vpoet 阅读(808) 评论(1) 推荐(1) 编辑
摘要:题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表,在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下:1 struct C... 阅读全文
posted @ 2015-08-29 20:09 vpoet 阅读(544) 评论(0) 推荐(0) 编辑
摘要:题目:输入一颗二叉树和一个整数,打印出二叉树中借点值得和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点定义:1 struct BinaryTreeNode2 {3 int m_nValue;4 BinaryTreeNode* m_pLeft... 阅读全文
posted @ 2015-08-29 10:28 vpoet 阅读(353) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序,如果是,则返回true,如果不是则返回false,假定输入的数组中任意两个数都不相等。此题目我们以5,7,6,9,11,10,8为例解题步骤如下:1.先找到序列的最后一个元素82.按照顺序从序列的从前往后遍历,知道遇到第一个大于8的数即9,... 阅读全文
posted @ 2015-08-29 10:13 vpoet 阅读(493) 评论(0) 推荐(1) 编辑
摘要:题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11二叉树结点的定义如下:1 struct BinaryTreeNode2 {3 int m_nValue;4 BinaryTreeNode* ... 阅读全文
posted @ 2015-07-27 20:25 vpoet 阅读(917) 评论(0) 推荐(1) 编辑
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该该压栈序列的弹出序列。这种判断其实只要掌握栈的先进... 阅读全文
posted @ 2015-07-26 21:35 vpoet 阅读(725) 评论(0) 推荐(0) 编辑
摘要:题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).这一题实际上需要一个辅助栈存储最小值:1.在模板类定义两个栈类型私有成员变量,一个为保存数据的栈另外一个为保存最小值的栈2.当栈为空的时候直接将数据同时压入数... 阅读全文
posted @ 2015-07-26 20:12 vpoet 阅读(464) 评论(2) 推荐(0) 编辑
摘要:题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:输入一个矩阵如下:1 1 2 3 42 5 6 7 83 9 10 11 124 13 14 15 16则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,... 阅读全文
posted @ 2015-07-24 17:30 vpoet 阅读(381) 评论(0) 推荐(0) 编辑
摘要:题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树节点定义如下:1 strcut BinaryTreeNode2 {3 int val;4 strcut BinaryTreeNode* m_pleft;5 strcut BinaryTreeNode* m_pri... 阅读全文
posted @ 2015-07-24 16:33 vpoet 阅读(224) 评论(0) 推荐(0) 编辑
摘要:题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下:1 struct BinaryTreeNode2 {3 int m_nValue;4 BinaryTreeNode* m_pLeft;5 BinaryTreeNode* m_pR... 阅读全文
posted @ 2015-07-24 11:12 vpoet 阅读(258) 评论(0) 推荐(0) 编辑
摘要:题目:输入两个递增的排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。例如链表1链表2合并为链表3.1 List1:1->3->5->723 List2:2->4->6->84 5 List3:1->2->3->4->5->6->7->8链表结点定义如下:1 struct ListN... 阅读全文
posted @ 2015-07-23 22:26 vpoet 阅读(194) 评论(0) 推荐(0) 编辑
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点链表结点定义如下:1 struct ListNode2 {3 int m_nKey;4 ListNode* m_pNext;5 }其实反转链表主要是链表指针的操作,一定要很清楚才行。其实在面试题5,从尾到头... 阅读全文
posted @ 2015-07-23 21:35 vpoet 阅读(602) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个链表,输出该链表的倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个节点。例如有一个链表有6个节点,从头节点开始他们的值依次是1,2,3,4,5,6.这个链表的倒数第三个节点是值为4的节点。这个题目常规情况下我们都是考虑先从链表的头遍历到链表的尾,然后... 阅读全文
posted @ 2015-07-23 21:07 vpoet 阅读(225) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有的奇数位于数组的前半部门,所有的偶数位于数组的后半部门。这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑我们将数组从前开始索引只要发现偶数这将偶数取出来并且将偶数后面的元素全部前移一个然后将偶数插入到最后,这样扫描一... 阅读全文
posted @ 2015-07-23 20:37 vpoet 阅读(356) 评论(0) 推荐(0) 编辑