ImageVerifierCode 换一换
格式:DOCX , 页数:76 ,大小:157.44KB ,
资源ID:1229692      下载积分:5 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-1229692.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(剑指offer答案全集.docx)为本站会员(h****)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

剑指offer答案全集.docx

1、按牛客网上的顺序来。2016.06.03 二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入描述:array: 待查找的二维数组target:查找的数字输出描述:查找到返回 true,查找不到返回 false代码:class Solution public:bool Find(vector array,int target) int row = array.size();/行数if(row=0) return false;int col = array0.s

2、ize();/列数if(col=0) return false;int i = 0, j = col - 1;/从右上角开始while(i=0)if(target=arrayij)return true;/找到,立即退出else if(targetarrayij) i+;/向下一行else j-;/向前一列if(i=row|jlength) return;char *end = str + newSize;/*end = 0;/最后一个字符置空end-; /往前一步p = str + size - 1; /原字符串的最后一个字符处while(p=str)if(*p= )/当前字符是空格,则替换

3、*end- = 0;*end- = 2;*end- = %;else/否则,不替换*end- = *p;p-;/依次向前分析:时间复杂度 O(N),N 为字符串长度。思想是先遍历一次得到字符串的长度和空格个数,计算出替换后的字符串长度,这样会在原字符串后面空出一段;然后从后往前,碰到空格就替换。鉴于义军的话:就在牛客网上的那个编辑器里写代码,不要在 VS 里面写,因为 VS 有自动补全功能,而面试的时候是没有自动补全的。所以从现在起,不在 VS 中写代码了,可能会在 VS 里查看有哪些成员函数。2016.06.04 从尾到头打印链表输入一个链表,从尾到头打印链表每个节点的值。代码:/* str

4、uct ListNode * int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) * * ;*/class Solution public:vector printListFromTailToHead(struct ListNode* head) vector vec;printTmp(head,vec);return vec;void printTmp(ListNode *head, vector printTmp(head-next,vec);vec.push_back(head-val);分析:递

5、归,时间复杂度 O(N),N 为链表长度。因为要返回一个 vector,所以必须另外写个函数,以便把 vector 作为参数。 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列1,2,4,7,3,5,6,8和中序遍历序列4,7,2,1,5,3,8,6,则重建二叉树并返回。代码:/* Definition for binary tree* struct TreeNode * int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : va

6、l(x), left(NULL), right(NULL) * ;*/class Solution public:struct TreeNode* reConstructBinaryTree(vector pre,vector in) if(pre.size()=0 | in.size()=0) return NULL;int size = pre.size();return constructTmp(pre,in,0,size-1,0,size-1);TreeNode * constructTmp(vector TreeNode * node = new TreeNode(pre.at(pr

7、ei);int i = ini;while(in.at(i)!=pre.at(prei) i+;int len = i - ini;node-left = constructTmp(pre,in,prei+1,prei+len,ini,i-1);node-right = constructTmp(pre,in,prei+len+1,prej,i+1,inj);return node;分析:时间复杂度 O(nlogn),n 为节点个数。递归的思想。2016.06.05 用两个栈实现队列用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。代码:class

8、 Solutionpublic:void push(int node) stack1.push(node);int pop() while(!stack1.empty()stack2.push(stack1.top();stack1.pop(); int ret = stack2.top();stack2.pop();while(!stack2.empty()stack1.push(stack2.top();stack2.pop(); return ret;private:stack stack1;stack stack2;分析:push 时间复杂度为 O(1),pop 时间复杂度为 O(n)

9、。需要注意的是栈的操作push、pop (并不返回元素) 、top、empty 。 旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组3,4,5,1,2为1,2,3,4,5的一个旋转,该数组的最小值为 1。NOTE:给出的所有元素都大于 0,若数组大小为 0,请返回 0。代码:class Solution public:int minNumberInRotateArray(vector rotateArray) int size = rotateArray.size();if(size=0) r

10、eturn 0;int low = 0, high = size - 1, mid;while(lowrotateArraylow) low = mid;else if(rotateArraymid rotateArray) int size = rotateArray.size();if(size=0) return 0;int min = rotateArray0;for(int i=1;i23)为了少用一个变量,采用了红色代码部分。 跳台阶一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。代码:class Solution public

11、:int jumpFloor(int n) if(n=-0.000001) else return 1.0/PowerTmp(base,-exponent);double PowerTmp(double base, int ex)if(ex=0) return 1.0;if(ex=1) return base;double ret = Power(base,ex/2);if(exelse return ret*ret;分析:时间复杂度为 O(logn),n 为指数。1)首先判断 base 和 exponent 是否合法:0 的负数次幂不合法,0 的 0 次幂默认为 1.2)考虑 exponen

12、t 正负,如果小于 0,返回倒数;3)如果 exponent 为奇数,则 power(base,ex)=power(base,ex/2)*power(base,ex/2)*base;如果 exponent 为偶数,则 power(base,ex)=power(base,ex/2)*power(base,ex/2);折半比循环快。 调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。代码:class Solution public:void reO

13、rderArray(vector if(size=0) return;int odd = 0, even = 0;/odd 为奇数下标,even 为第一个偶数下标while(arrayeven/找到第一个偶数odd = even + 1;/从第一个偶数后面开始找到第一个奇数while(odd=size) break;/如果没有奇数了,及时退出/将even,odd-1之间的偶数向后移一位int tmp = arrayodd;for(int i=odd;ieven;i-)arrayi = arrayi-1;arrayeven = tmp;/把奇数放到前面even+;odd+;分析:此题要是可以改变相对位置,则有时间复杂度为 O(n)、空间复杂度为 O(1)的方法。但是要保证相对位置不变,要么时间复杂度为 O(n)、空间复杂度为 O(n),要么时间复杂度为 O(n*n)、空间复杂度为 O(1)。本代码的时间复杂度为 O(n*n),但运行时间为 0ms。 。 。那么此题的意义何在? 链表中倒数第 k 个结点输入一个链表,输出该链表中倒数第 k 个结点。代码:/*struct ListNode

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。