剑指offer第三章
剑指offer第三章
1.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
- class Solution {
- public:
- bool g_InvalidInput=false;
- double Power(double base, int exponent)
- {
- g_InvalidInput=false;
- if(equal(base,0.0)&&exponent<)
- {
- g_InvalidInput=true;
- return 0.0;
- }
- unsigned int absExponent=(unsigned int)(exponent);
- if(exponent<)
- absExponent=(unsigned int)(-exponent);
- double result=PowerWithUnsignedExponent(base,absExponent);
- if(exponent<)
- result=1.0/result;
- return result;
- }
- double PowerWithUnsignedExponent(double base,unsigned int exponent)
- {
- double result=1.0;
- for(int i=;i<=exponent;++i)
- result*=base;
- return result;
- }
- bool equal(double num1,double num2)
- {
- if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))
- return true;
- else
- return false;
- }
- };
2.调整数组顺序使奇数位于偶数前面,并保持奇数和奇数,偶数和偶数相对位置不变
- class Solution {
- public:
- void reOrderArray(vector<int> &array)
- {
- vector<int> res;
- for(int i = ; i < array.size(); i++)
- {
- if(array[i] % == )
- res.push_back(array[i]);
- }
- for(int i = ; i < array.size(); i++)
- {
- if(array[i] % == )
- res.push_back(array[i]);
- }
- //array.swap(res);
- array = res;
- }
- };
3.输入一个链表,输出该链表中倒数第k个结点
- /*
- struct ListNode {
- int val;
- struct ListNode *next;
- ListNode(int x) :
- val(x), next(NULL) {
- }
- };*/
- class Solution {
- public:
- ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
- {
- if(pListHead==NULL||k==)
- return NULL;
- ListNode *pAhead=pListHead;
- ListNode *pBhind=NULL;
- for(unsigned int i=;i<k-;++i)
- {
- if(pAhead->next!=NULL)
- pAhead=pAhead->next;
- else
- return NULL;
- }
- pBhind=pListHead;
- while(pAhead->next!=NULL)
- {
- pAhead=pAhead->next;
- pBhind=pBhind->next;
- }
- return pBhind;
- }
- };
4.输入一个链表,反转链表后,输出链表的所有元素。
- /*
- struct ListNode {
- int val;
- struct ListNode *next;
- ListNode(int x) :
- val(x), next(NULL) {
- }
- };*/
- class Solution {
- public:
- ListNode* ReverseList(ListNode* pHead)
- {
- ListNode* pReversedHead=NULL;
- ListNode* pNode=pHead;
- ListNode* pPrev=NULL;
- while(pNode!=NULL)
- {
- ListNode* pNext=pNode->next;
- if(pNext==NULL)
- pReversedHead=pNode;
- pNode->next=pPrev;
- pPrev=pNode;
- pNode=pNext;
- }
- return pReversedHead;
- }
- };
5.合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- /*
- struct ListNode {
- int val;
- struct ListNode *next;
- ListNode(int x) :
- val(x), next(NULL) {
- }
- };*/
- class Solution {
- public:
- ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
- {
- if(pHead1==NULL) //链表1为空,直接返回链表2
- return pHead2;
- else if(pHead2==NULL)//链表2为空,直接返回链表1
- return pHead1;
- ListNode* pMergedHead=NULL;
- if(pHead1->val<pHead2->val)
- {
- pMergedHead=pHead1;
- pMergedHead->next=Merge(pHead1->next,pHead2);//递归
- }
- else
- {
- pMergedHead=pHead2;
- pMergedHead->next=Merge(pHead1,pHead2->next);//递归
- }
- return pMergedHead;
- }
- };
6.树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- /*
- struct TreeNode {
- int val;
- struct TreeNode *left;
- struct TreeNode *right;
- TreeNode(int x) :
- val(x), left(NULL), right(NULL) {
- }
- };*/
- class Solution {
- public:
- bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
- {
- bool result=false;
- //递归在A中查找与B根结点相同的结点
- if(pRoot1!=NULL&&pRoot2!=NULL)//树A和树B不为空
- {
- if(pRoot1->val==pRoot2->val)//找到相等的结点,执行第二步
- result=DoesTree1HaveTree2(pRoot1,pRoot2);
- if(!result)
- {
- result=HasSubtree(pRoot1->left,pRoot2);//找左结点
- }
- if(!result)
- {
- result=HasSubtree(pRoot1->right,pRoot2);//找右结点
- }
- }
- return result;
- }
- bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode* pRoot2)
- {
- if(pRoot2==NULL)//树B找到叶结点的左右,则返回真
- return true;
- if(pRoot1==NULL)//树A找到叶结点的左右,返回假
- return false;
- if(pRoot1->val!=pRoot2->val)//不等,返回假
- return false;
- //相等,递归判断左右结点是否相等
- return DoesTree1HaveTree2(pRoot1->left,pRoot2->left)&&DoesTree1HaveTree2(pRoot1->right,pRoot2->right);
- }
- };
剑指offer第三章的更多相关文章
- 剑指offer—第三章高质量的代码(按顺序打印从1到n位十进制数)
题目:输入一个数字n,按照顺序打印出1到最大n位十进制数,比如输入3,则打印出1,2,3直到最大的3位数999为止. 本题陷阱:没有考虑到大数的问题. 本题解题思路:将要打印的数字,看成字符串,不足位 ...
- 剑指offer—第三章高质量代码(数值的整数次方)
高质量的代码:容错处理能力,规范性,完整性.尽量展示代码的可扩展型和可维护性. 容错处理能力:特别的输入和处理,异常,资源回收. 规范性:清晰的书写,清晰的布局,合理的命名. 完整性:功能测试,边界测 ...
- 剑指offer—第三章高质量代码(o(1)时间删除链表节点)
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点,链表节点与函数的定义如下:struct ListNode{int m_nValue;ListNode* m_pValue ...
- 剑指offer—第三章高质量代码(合并两个排序链表)
题目:输入员两个递增排序的链表,合并这两个链表并使新的链表中的结点仍然是按照递增排序的. 思路:首先,定义两个头节点分别为Head1和Head2的链表,然后比较第一个节点的值,如果是Head1-> ...
- 剑指offer第七章&第八章
剑指offer第七章&第八章 1.把字符串转换成整数 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串 ...
- 剑指offer第六章
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
- 剑指offer第四章
剑指offer第四章 1.二叉树的镜像 二叉树的镜像:输入一个二叉树,输出它的镜像 分析:求树的镜像过程其实就是在遍历树的同时,交换非叶结点的左右子结点. 求镜像的过程:先前序遍历这棵树的每个结点,如 ...
- 剑指Offer(三十二):把数组排成最小的数
剑指Offer(三十二):把数组排成最小的数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...
随机推荐
- maven笔记(1)
maven环境搭建:http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html 项目管理利器(Maven)——常用的构建命令1. mvn - ...
- Java之聊天室系统设计一
任务: 先上实现效果图: 登陆界面: index.jsp: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- 我的Android学习路线(二)
这两天的主要工作: 优化了一下布局界面,原本使用的是相对布局,直观省力,但是考虑了一下还是使用更加主流的线性布局. 完善了一下计算器的功能,比如加入小数运算. 使用线性布局的思路可以用下面的伪代码表示 ...
- Learning R笔记(一)
基本操作 帮助文档:?函数.演示:demo(函数).参数列表:formals(函数),返回为成对列表pairlist. 用all.equal函数检查浮点数是否相等,容忍度默认为1.5e-8,如果相等返 ...
- HDU5137-最短路-删点
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...
- SPOJ KPSUM ★(数位DP)
题意 将1~N(1<=N<=10^15)写在纸上,然后在相邻的数字间交替插入+和-,求最后的结果.例如当N为12时,答案为:+1-2+3-4+5-6+7-8+9-1+0-1+1-1+2=5 ...
- 二十二、utl_inaddr(用于取得局域网或Internet环境中的主机名和IP地址)
1.概述 作用:用于取得局域网或Internet环境中的主机名和IP地址. 2.包的组成 1).get_host_name作用:用于取得指定IP地址所对应的主机名语法:utl_inaddr.get_h ...
- Redis--初入
安装 .下载源码,解压缩后编译源码 $ wget http://download.redis.io/releases/redis-4.0.1.tar.gz $ tar xzf redis-4.0.1 ...
- Python之Fabric
[Fabric] Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署. 安装 wget https://bootstr ...
- python获取文件路径, 文件名, 后缀名
def get_filePath_fileName_fileExt(fileUrl): """ 获取文件路径, 文件名, 后缀名 :param fileUrl: :ret ...