![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
denghe1122
不知道你身边有没有这样一种人,明明已经百里挑一,还觉得基数太小;明明已经出类拔萃,还觉得炮灰太少。每天像缺钱一样勤奋,像欠债一样努力。每每遇到这样的人,我都会问一句:为什么?
展开
-
剑指offer——面试题52:构建乘积数组
题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。 我的代码:class Solution {public: vector multiply(const vector& A) {原创 2017-12-03 21:41:15 · 345 阅读 · 0 评论 -
剑指offer——面试题62:序列化二叉树
题目:请实现两个函数,分别用来序列化和反序列化二叉树 题目分析:能被这一题给坑死。首先,你得稍微解释下什么是序列化和反序列化吧,虽然我知道,但是很多人肯定不知道啊。还有,函数给的参数真心烦,明明 vector 就能解决,还整个 char*。而且,函数的形参给的是 char *,真心不好改。 我的代码:class Solution { public: char*原创 2017-12-02 22:12:55 · 428 阅读 · 0 评论 -
剑指offer——面试题55:字符流中第一个不重复的字符
题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述 : 如果当前字符流没有存在出现一次的字符,返回 # 字符。 代码:class Solution{public: strin原创 2017-12-02 20:52:44 · 330 阅读 · 0 评论 -
剑指offer——面试题3:二维数组的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 代码:class Solution {public: int jumpFloor(int number) { int jumpNum = 0; if(number <=原创 2017-12-02 20:09:25 · 402 阅读 · 0 评论 -
剑指offer——面试题46:求1+2+ ... +n 之和
先占着坑,明天把内容补全原创 2017-11-29 21:54:10 · 365 阅读 · 0 评论 -
剑指offer:面试题42——左旋转字符串
问题描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 我的代码:class Solution {public: string L原创 2017-12-18 22:46:36 · 364 阅读 · 0 评论 -
剑指offer——面试题18:树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};原创 2017-11-21 21:00:09 · 472 阅读 · 0 评论 -
剑指offer——面试题11:数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方 代码:class Solution {public: bool g_InvalidInput = false; // 采用全局变量来标识是否出错 bool equal(double num1,double num2) // {原创 2017-11-05 21:03:02 · 412 阅读 · 0 评论 -
剑指offer——面试题9:菲波那切数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n代码:[cpp] view plain copyclass Solution { public: int Fibonacci(int n) { if(n 39) retur原创 2017-11-05 18:38:23 · 501 阅读 · 0 评论 -
剑指offer——面试题41:和为s 的两个数字
题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。 代码:class Solution {public: vector FindNumbersWithSum(vector array,int sum) { int min原创 2017-12-04 20:49:55 · 358 阅读 · 0 评论 -
剑指offer——面试题6:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 我的代码:/** * Definition for binary tree * struct TreeNode { * int原创 2017-12-04 22:27:05 · 349 阅读 · 0 评论 -
剑指offer——面试题61:按之字形打印二叉树
题目: 代码: 分析:原创 2018-01-24 22:39:59 · 377 阅读 · 0 评论 -
剑指offer——面试题:把字符串转换为整数
题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1 :输入+21474836471a33输出21474836470 我的代码:class Sol原创 2017-12-18 21:23:39 · 834 阅读 · 0 评论 -
剑指offer——面试题54:表示数值的字符串
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是 代码:class Solution {public: void scanDigits(char** string)原创 2017-12-07 22:20:20 · 405 阅读 · 0 评论 -
剑指offer——面试题61:按之字形顺序打印二叉树
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :原创 2017-12-07 21:18:05 · 405 阅读 · 0 评论 -
剑指offer——面试题36:数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size对于%75的数据,size对于%100的数据,size 测试样例:1,2,3,4,5原创 2017-12-15 22:27:20 · 535 阅读 · 0 评论 -
剑指offer——面试题4:替换空格
题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy 代码:class Solution {public: // length 为字符数组的总容量 void replaceSpace(char *str,int length) { if(str ==原创 2017-12-06 21:34:58 · 359 阅读 · 0 评论 -
剑指offer——面试题16:反转链表
题目:输入一个链表,反转链表后,输出链表的所有元素 代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNod原创 2017-12-14 22:09:51 · 358 阅读 · 0 评论 -
剑指offer——面试题8:旋转数组的最小数值
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0 我的代码:class Solution {public: int minNumberIn原创 2017-12-14 22:06:18 · 413 阅读 · 0 评论 -
剑指offer——面试题42:翻转单词序列
题目:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 分析:这道题题目描原创 2017-12-14 20:50:52 · 610 阅读 · 0 评论 -
剑指offer——面试题34:丑数
题目原创 2017-11-04 21:57:55 · 493 阅读 · 0 评论 -
剑指offer——面试题14:调整数组顺序是奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 1、 我的解法代码:class Solution {public: void reOrderArray(vector &array) { //if(array == NULL)原创 2017-11-19 16:36:48 · 518 阅读 · 0 评论 -
剑指offer——面试题59:对称的二叉树
题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x),原创 2017-11-08 21:54:06 · 533 阅读 · 0 评论 -
剑指offer——面试题47:不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号我的代码:class Solution {public: int Add(int num1, int num2) { int temp1,temp2; if(num1 == 0) return num2; temp1 =原创 2017-10-30 20:18:52 · 601 阅读 · 0 评论 -
剑指offer——面试题19:二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5原创 2017-11-07 21:52:56 · 472 阅读 · 2 评论 -
剑指offer——面试题10:二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。完整代码:class Solution {public: int NumberOf1(int n) { int berNum = 0; while(n) { berNum++; n = (n-1) & n原创 2017-10-29 15:36:30 · 577 阅读 · 0 评论 -
剑指offer——平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树 代码:class Solution {public: int TreeDepth(TreeNode* pRoot) { if(pRoot == NULL) return 0; int pLeft = TreeDepth(pRoot->lef原创 2017-11-06 21:34:57 · 429 阅读 · 0 评论 -
剑指offer——面试题39:二叉树的深度
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度 代码: 分析:原创 2017-11-06 20:31:05 · 382 阅读 · 0 评论 -
剑指offer——面试题21:包含 min 函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。代码:class Solution {public: void push(int value) { dataStack.push(value); if(minStack.empty() || minStack.top() > value) // 本题最重要的就是什么时候原创 2017-10-29 11:28:56 · 544 阅读 · 0 评论 -
剑指offer——面试题7:用两个栈实现队列
题目(牛客网):用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型代码:class Solution{public: void push(int node) { stack1.push(node); } int pop() { int temp = 0; if(st原创 2017-10-29 10:39:31 · 485 阅读 · 0 评论 -
剑指offer——面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)代码:class Solution {public: bool IsPopOrde原创 2017-10-28 16:30:10 · 465 阅读 · 0 评论 -
剑指offer——面试题17:合并两个排序的链表(非递归方法和递归方法)
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 分析:一开始拿到这一题,我定义了两个栈,一次把两个链表的结点依次压入栈中,然后依次比较两个栈的栈顶元素,使用尾插法,合成一个新的链表。本来感觉不算太复杂,但是我写出来的代码和《剑指offer》书上一比,,自惭形秽地太厉害了,所以,在这里我还是不粘上了,就让它躺在我的牛客网上的编辑页面吧原创 2017-10-26 22:00:42 · 610 阅读 · 0 评论 -
剑指offer——面试题37:两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。【方法一、利用栈】代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindFirstCommo原创 2017-10-25 21:32:11 · 736 阅读 · 0 评论 -
剑指offer——跳台阶
这一题在《剑指offer》上并没有,但是牛客网上有,可能是我的书有点老了吧。。。题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法代码:class Solution {public: int jumpFloor(int number) { int jumpNum = 0; if(number <= 0原创 2017-10-31 21:16:07 · 448 阅读 · 0 评论 -
剑指offer:变态跳台阶
接着上一题青蛙跳做。这一题在《剑指offer》上还是没有,只有牛客网上有,不知道咋回事 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 代码:class Solution {public: int jumpFloorII(int number) { if(number <= 0)原创 2017-10-31 22:06:11 · 511 阅读 · 0 评论 -
剑指offer——面试题51:数组中重复的数字
题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 代码:class Solution {public: // Parameters:原创 2017-11-04 19:46:57 · 528 阅读 · 0 评论 -
剑指offer——面试题35:第一个只出现一次的字符
题目:在一个字符串(1 代码:class Solution {public: int FirstNotRepeatingChar(string str) { int index = 0; if(str.empty()) return -1; // 空字符串,返回负值 const int tablesi原创 2017-11-13 22:30:18 · 435 阅读 · 0 评论 -
剑指offer——面试题58:二叉树的下一个结点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 代码:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLin原创 2017-11-13 21:38:02 · 544 阅读 · 0 评论 -
剑指offer——面试题23:从上往下打印二叉树
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solutio原创 2017-11-13 20:44:29 · 356 阅读 · 0 评论 -
剑指offer面试题5——链表之从尾到头打印链表
题目描述:输入一个链表,从尾到头打印每个结点的值。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/ 以上内容是题目给的结点定原创 2017-10-21 19:04:03 · 954 阅读 · 0 评论