随笔分类 - 剑指offer读书笔记
摘要:题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。链表节点与函数的定义如下。通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点。然后使得该节点的next指向删除节点的next即可,这样看来删除一个节点的复杂度为O(n)然而我们其实遍历的目的只是想获取想要删除...
阅读全文
摘要:题目:输入数字n,按照打印出从1最大的n位10进制数。比如3,则打印出1、2、3一直到最大的3位数即9991.你觉得如果面试会有这么简单的题,那只能说明你---太天真。2.n=3尚可,如果n=30 300呢有这样的内置数据类型能包括这么大的数吗?3.说白了,这道题就是考察用字符串模拟大数。算法思想如...
阅读全文
摘要:题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数的问题.这道题看似很简单:然而需要考虑的方面到不少:1.如何处理指数为负数,将负数当成正数处理 对结果求倒2.当指数为负数的时候并且底数为0...
阅读全文
摘要:题目:请实现一个函数,输入一个函数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2.这道题最典型的方法就是用移位统计,就比如统计9的二进制1个数:1.9的二进制位1001,9-1的二进制位1000.2.两者做与运算,结果为1表示最后一位为1,否...
阅读全文
摘要:题目一:写一个函数,输入n,求斐波拉契数列的第n项。斐波拉契数列的定义如下:1 { 0 n=0; 2 f(n)={ 1 n=1;3 { f(n-1)+f(n-2) ...
阅读全文
摘要:题目:把一个数组最开始的若干个元素搬到数据的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。这道题可以使用类似于二分查找的思想,算法思路如下:1.假设有一个旋转数组A,我们设两...
阅读全文
摘要:题目.用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead分别完成在对尾插入节点和在队头删除节点。该队列类模板如下: 1 template 2 class CQueue 3 { 4 public: 5 void appendTail(const...
阅读全文
摘要:题目:输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头结点。二叉树的定义如下:1 struct Bi...
阅读全文
摘要:题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出。但是这种情况破坏了链表的结构。如果面试官要求不破坏链表结构呢,这时候我们就想到了一种数据结构---栈 当我们从前往后遍历链表逐个压栈 然后遍历结束后再逐个出栈。首先我们先来用第一...
阅读全文
摘要:题目:请实现一个函数,把字符串中的每个空格都替换成"%20"。例如输入"We are happy."则输出"We%20are%20happy."这道题一看到就能想到直接从前到后遍历字符串,当遇到空格时候先将空格后面的字符串中每个字符向后移动两个位置,然后再把空格及空格之后的两个字符替换为"%20"剑...
阅读全文
摘要:题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断该数组中是否有该整数。算法流程如下:比如一个二维数组array:1 1 2 8 92 3 2 4 9 124 5 4 7 10 136 7 6 8 1...
阅读全文
摘要:题目:设计一个类,我们只能生成该类的一个实例这道题显然是对设计模式的考察,很明显是单例模式。什么是单例模式呢,就是就像题目所说的只能生成一个类的实例。那么我们不难考虑到下面几点:1.不能new多个对象,那么必然该类的构造函数是私有的2.类对象只有一个,那么必然该对象只能有一个私有的静态成员变量,该成...
阅读全文
摘要:题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数 1 class CMyString 2 { 3 public: 4 CMyString(char *pData=NULL); 5 CMyString(const CMyString & str); 6 ~...
阅读全文