
剑指offer
人间世庄子
这个作者很懒,什么都没留下…
展开
-
剑指offer 题22—链表中倒数第K个节点
剑指offer 题22—链表中倒数第K个节点 题目 输入一个链表,输出该链表中倒数第K个节点。为了符合大多数人的习惯,从本题第1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次为1,2,3,4,5,6.这个链表的倒数第3个节点是值为4的节点。节点定义如下: struct ListNode { int m_nValue; ListNode* m_pN...原创 2020-02-15 21:56:27 · 170 阅读 · 0 评论 -
剑指offer 题21—调整数组顺序是奇书位于偶数前面
调整数组顺序是奇书位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有计数位于数组的前半部分,所有偶数位于数组的后半部分 初步分析 最简单的办法当然是从头扫描这个数组,每碰到一个偶数,就该数放到最后面,也就是这个数后面的数都要向前移动。 由于每碰到一个偶数就要移动O(n)个数字,总的时间复杂度为O(n^2)。 更好的办法 既然数组中只有两类数字——非奇即偶。那...原创 2020-02-12 21:18:33 · 186 阅读 · 0 评论 -
剑指offer 题20—表示数值的字符串
表示数值的字符串 题目: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数) 例如,字符串"+100"、“5e2”、"-123"、“3.1416"以及”-1E-16"都表示数值,但"12e"、“1a3,14”、“1.2.3”、"±5"以及"±5"和"12e5.4"都不是 表示模式 可以总结出表示的数值的字符串模式为 A[.[B]][e|EC] 或者.B[e|EC] 其中A为数值的整数部...原创 2020-02-09 21:52:15 · 207 阅读 · 0 评论 -
剑指offer 题19—正则表达式匹配
正则表达式匹配 题目: 请实现一个函数用来匹配包含 ‘.’ 和 '* '正则表达式。模式中的字符 ‘.’ 表示任意一个字符,而 '*'表示它的前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串中所有的字符匹配整个模式,例如,字符串"aaa"与模式"a.a"和"ab * ac * a"匹配但与"aa.a"和"ab * a"均不匹配 每次从字符串中拿出一个字符和模式中的字符去匹配。 假...原创 2020-02-08 20:45:30 · 123 阅读 · 0 评论 -
剑指offer 题18——删除链表的节点
题目一:在O(1)时间内删除链表节点 题目: 给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点, 链表节点与函数定义如下: struct ListNode { int m_nValue; ListNode* m_pNext; } ``` 在单向链表中删除一个节点,常规做法就是从第一个节点开始,依次进入下一节点进行判断,直到找到需要删除的节点的节点...原创 2020-02-05 21:33:06 · 170 阅读 · 0 评论 -
剑指offer 题17——数值的整数次方
数值的整数次方 题目: 输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999. 1. 陷阱 乍一看,似乎很简单,一次循环就能搞定 void PrintToMaxOfNDigits_1(int n) { int number=1; int i=0; while(i++<n) number*=10; for(i=1;i<...原创 2020-02-04 22:12:35 · 162 阅读 · 0 评论 -
剑指offer 题16——数值的整数次方
数值的整数次方 题目: 实现函数double Power(double base,int exponent), 求base得exponent次方。不得使用库函数,同时不需要考虑大数问题 因为不需要考虑大数问题,所以看起来似乎很简单,只需要累加就好 double Power(double base,int exponent) { double result=1.0; for(int i=0;...原创 2020-02-03 21:16:36 · 191 阅读 · 0 评论 -
剑指offer 题15——二进制中1的个数
二进制中1的个数 题目: 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1.因此,如果输入9,那么函数输出2 有这样一个段子: 世上有10种人,一种人知道二进制,而另一种人不知道二进制 二进制运算是十分重要的。 高效而便捷 如果我们按部就班,只看最后一位,但判断之后进行移位,直到最后数完。可以写出以下代码: int NumberOfl(i...原创 2020-02-02 22:18:52 · 234 阅读 · 0 评论 -
剑指offer 题14——剪绳子
剪绳子 题目 给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]×k[1]×…×k[m]的可能最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大乘积为18. 动态规划 我们可以进行这样的分析,假设把长度为n的绳子剪成若干段后得到的乘积最大值为函数f...原创 2019-12-23 21:06:17 · 176 阅读 · 1 评论 -
剑指offer 题13——机器人的运动范围
机器人的运动范围 题目: 地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左、右、上、下移动一格,但是不能进入行坐标和列坐标的数位之和大于K的格子。例如,当K为18时,机器人能够进入方格(35,37),因为3+5+3+7=18.但它不能进入方格(35,38),因为3+5+3+8=19.请问该机器人能够到达多少个格子。 与题12类似,可以采用回溯法。如果机器人能够...原创 2019-12-05 23:32:14 · 164 阅读 · 0 评论 -
剑指offer 题12——矩阵中的路径
矩阵中的路径 题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某个字符串的所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 例如,在下面3x4的矩阵中包含一条字符串"bfce"的路径,但不包含字符串"abfb"的路径。 这是一道典型的可以用回溯法解决的问题,假设字符的前n个字...原创 2019-12-04 21:44:26 · 109 阅读 · 0 评论 -
剑指offer 题11——旋转数组的最小数字
旋转数组的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1 这一题看似一遍循环就能解决,的确,一遍循环就能解决,但是面试官肯定不会是考察你循环会不会写。 我们来寻求一下简单一点的办法。 从题目中可以知道,数组被分成了...原创 2019-12-03 23:19:36 · 179 阅读 · 0 评论 -
剑指offer 题10——斐波那契数列
斐波那契数列 题目一:求斐波那契数列的第n项 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列定义如下: 斐波那契数列大家比较熟悉,因为很多教材上都拿它来举例子说明递归的用法。一般而言,根据函数数列定义,教材会给出以下代码: long long Fibonacci(unsigned int n) { if(n<=0) return 0; if(n=...原创 2019-12-02 23:19:54 · 155 阅读 · 0 评论 -
剑指offer 题9——用两个栈实现队列
用两个栈实现队列 题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能 template<typename T>class CQueue { public: CQueue(void); ~CQueue(void); void append...原创 2019-12-01 22:09:05 · 163 阅读 · 0 评论 -
剑指offer 题8——二叉树的下一个节点
二叉树的下一个节点 题目如下: 给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右节点的指针,还有一个指向父节点的指针。 我们可以先举个例子来具体化一下,太抽象了不好理解 下面是一颗二叉树 它的中序遍历序列为**{d,b,h,e,i,a,f,c,g}** 我们可以分为以下几个情况分析: 1、该节点有右子树(b节点) 由中序遍历的特性可以知道,...原创 2019-11-30 23:50:18 · 178 阅读 · 0 评论 -
剑指offer 题7——重建二叉树
重建二叉树 题目如下 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,输入前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建的二叉树如下图所示并输出它的头结点指针。 二叉树定义如下: sturct BinaryTreeNode { int m_nValue; Bina...原创 2019-11-29 23:54:12 · 120 阅读 · 0 评论 -
剑值offer 题6——从尾到头打印单向链表
从尾到头打印单向链表 题目 输入一个链表的头节点,从头到尾反过来打印出每个节点的值。 链表节点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext;` }; 就开始的想法可能是将指针进行反向,这样就可以从尾向前打印了,但是需要询问面试官是否能修改输入的数据。 一般而言,对于只读操作,不希望打印是改变修改的内容。 因此我们讨...原创 2019-11-29 22:53:42 · 122 阅读 · 0 评论 -
剑指offer 题5—替换空格
题目 请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.", 则输出"We%20are%20happy."。 首先拿到题目,第一感觉就是一个 ‘空格’ 变成了 ‘%20’ 那字符串长度肯定变长啊 所以我第一反应是创建新的字符串B,然后从A一个个读取字符,遇到 ‘空格’ 就用 ‘%20’ 来替代,只要B空间足够,遍历一遍就成了。 但是,面试再简单也不是考...原创 2019-11-29 00:15:19 · 123 阅读 · 0 评论