
剑指offer
希望尽快刷完剑指offer
Mr_H9527
努力,奋斗
展开
-
c++单例模式----剑指offer第一题
概念 单例模式是23种设计模式中的一种创建型模式,也是最容易理解,应用最广泛的模式之一,由于其的这些性质,也是面试中经常被问到的一种设计模式。为一个类唯一的生成一个对象是单例模式完成的主要工作。它的实现可以分为两种,我们先给出饿汉模式和懒汉模式的概念,后面会逐一介绍。 饿汉模式和懒汉模式 顾名思义,饿汉模式就是在你的程序刚开始运行的时候就创建出单例的对象,而不是等到使用的时候才去创建它;而懒...原创 2019-09-12 12:51:47 · 330 阅读 · 0 评论 -
两个队列实现一个栈----剑指offer扩展
题目描述 使用两个队列实现一个栈。实现push和pop函数。 解题思路 利用队列先进先出的特性,我们可以使用两个队列来模拟栈的特性。当我们往栈中push元素时,往非空的那个队列中push;当我们pop栈中的元素时,将非空的队列中的元素取出来再push到本来为空的队列中,直到剩下一个元素时,将该元素front出来。 代码实现 #include <iostream> #incl...原创 2019-09-23 13:22:40 · 219 阅读 · 0 评论 -
打印从1到最大的n位数----剑指offer第17题
题目描述 输入数字n,按顺序打印从1开始到最大的n位十进制数,例如当n = 3,就输出从1~999. 解题思路 可能大家会想这么简单的题用一个for循环输出不就好了吗,其实这是最基本的情况。如果n为100呢?整型数据存不下的时候怎么做?其实这里还是涉及到一个大数的加法问题。我们使用一个vector,其中的每一位存放整数中的一位,从最低位到最高位,输出的时候从高到低输出。 代码实现 #i...原创 2019-09-17 19:52:01 · 206 阅读 · 0 评论 -
自己实现power函数----剑指offer第十六题
题目描述 实现函数 double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。 解题思路 如果我们要求的exponent是32,而且此时我们已经知道了它的16次方,那么只需要给其16次方求一次平方即可,而16次方是8次方的平方,以此类推,我们求32次方时只需要做5次乘法:先求平方,在平方的基础上求...原创 2019-09-16 20:35:06 · 339 阅读 · 0 评论 -
二进制中1的个数----剑指offer第十五题
题目描述 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。 解题思路 当一个数n和n-1做位与运算的结果不为0的时候,说明该数的二进制表示中存在1,而且位与的结果中1的个数会比n中1的个数刚好减少一个。我们可以根据这个方法来对齐进行位与,直到位与的结果为0,再输出循环的次数。 代码实现 int judge(int number) { int count = 0; ...原创 2019-09-16 19:23:41 · 179 阅读 · 0 评论 -
两个栈实现一个队列----剑指offer第七题
题目描述 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。 解题思路 我们定义两个栈stack1和stack2,stack1用来插入元素,当要删除元素时,首先将stack1中的所有元素全部push到stack2中,这样stack1栈顶的元素就到了stack2栈底,stack1栈底的元素就...原创 2019-09-15 18:37:23 · 143 阅读 · 0 评论 -
重建二叉树----剑指offer第六题
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。节点的定义如下 typedef struct Node { char val; Node* lc; Node* rc; Node(char x) :val(x) { lc = NULL; rc = NULL; } }Node; 解题思路 在二叉树的前序遍历中,第...原创 2019-09-15 15:40:20 · 179 阅读 · 0 评论 -
从尾到头打印链表----剑指offer第五题
题目描述 输入一个链表的头节点,从尾到头打印出链表的每个节点的val。 解题思路 我们知道单链表只能从前往后遍历,那从最后一个元素开始打印节点的val值必须要先遍历之前的每个节点,也就是先遍历的后输出。想到这里不难想到我们要用到的结构是栈了吧,由于栈的特性就是先进后出。把之前遍历过的每个节点的值都保存在栈里,遍历完之后栈顶元素就是单链表的最后一个元素,然后我们依次输出栈中元素即可。 代码实...原创 2019-09-15 12:18:21 · 176 阅读 · 0 评论 -
替换字符串----剑指offer第四题
题目描述 请实现一个函数,把字符串中的每个空格替换成“%20”,例如,输入“we are happy.”,则输出“we%20are%20happy.”. 解题思路 利用c++的string类型中的insert方法,进行遍历,如果当前下标的字符是空格,那么把它替换成%,再使用insert方法插入20. 实现代码 #include<iostream> #include<s...原创 2019-09-13 11:07:21 · 191 阅读 · 0 评论 -
二维数组中的查找----剑指offer第三题
题目描述 在一个二维数组中,每一行都按照从左往右递增,每一列都按照从上往下递增。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 按照该二维数组的特性,我们可以从第一行的最后一个元素开始查找,当该元素小于目标元素时,我们就可以直接忽略这一整行的其他元素进入下一行,当该元素大于目标元素时,我们可以直接忽略这一列,向左递减一列。然后重复这个过程,直到找完这整...原创 2019-09-12 19:50:25 · 171 阅读 · 0 评论 -
数组中重复的数字----剑指offer第二题
题目描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复,也不知道每个数字重复了几次,请找出任意一个重复的数字。例如,数组是[2,3,1,0,2,5,3],那么重复的数字可以是2或者3. 解题思路 在原数组里从头到尾进行扫描,当扫描到下标为i的数字(设为m)时,首先比较m是不是等于i。如果是则扫描下一个数字;如果不是则再拿它和第m个数字...原创 2019-09-12 18:49:24 · 180 阅读 · 0 评论 -
删除链表的节点----剑指offer第18题
题目描述 在O(1)时间复杂度内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。链表节点与函数的定义如下: typedef struct Node { int val; Node* next; }Node; 解题思路 由于单链表的限制,如果要删除一个节点必须得到它的prev节点,这样的时间复杂度只能是O(n)。但我们有另外一种方法,我们可以...原创 2019-09-23 14:20:28 · 316 阅读 · 0 评论