自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

皓皓松的博客

欢迎来到 皓皓松博客,敢想!敢做!敢当!

  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 【面试题】剑指Offer-50-求两个节点的最近公共祖先

题目概述一颗二叉树,给出两个节点,求这两个节点的公共的祖先节点(要求的是离他们是最近的)比如,6和8的公共节点为1,4,但是最近公共节点为4解题思路假设我们求6和8两个节点的公共祖先我们可以遍历一遍二叉树,求出6和8分别的路径6的路径Path1为1,4,5,68的路径Path2为1,4,8这里我们用栈来保存该路径这里比较Path1和Path2的大小由

2017-04-22 15:56:22 1640

原创 【面试题】剑指Offer-49-模拟实现atoi()函数

题目概述解题思路就像本篇博文的题目所介绍的那样这道题目就是让模拟实现atoi函数结合库中的atoi函数,我们需要处理的情况有以下几种各种情况分析情况1:正常情况,给的字符串“123”,在正常的范围内情况2:字符串为空情况3:传入的数字为负数情况4:字符串中间有异常字符的情况情况5:字符串越界的情况情况6:字符串开头有空格的情况情况7:字符串开

2017-04-22 15:45:44 858

原创 【面试题】剑指Offer-48-不能被继承的类

题目概述解题思路方法1定义一个A类如果B类想要继承A类的话就会调用A类的构造函数那么只要将A类的构造函数设置为私有成员B类便无法继承A类了然后我们可以通过设置一个函数,通过在堆上开辟空间来使用A类代码实现//普通方法,将类的构造函数设置为私有//缺点:只可以在堆上创建空间class A{public: static A* GetObj() {

2017-04-22 15:25:55 529

原创 【小项目】实现一个简单的对象池,用来管理空间的申请和释放

为什么需要对象池频繁的申请和释放空间会导致效率的下降同时也会引起内存碎片化,造成申请大块内存时申请不到的情况设计思想当想要申请N个内存块时,如果对象池的所有空间都被使用了,则想系统申请(N*2)的空间,同时将N扩大两倍释放空间时,用指针存储释放空间的地址如果对象池有释放的空间,则先利用释放的空间,从而实现重复的利用注意:每个对象池的所有内存块应该是一定的大小,即一个对象

2017-04-21 10:46:54 543

原创 【Linux】进程终止以及atexit()函数的介绍

进程终止的八种方式:1、从main()函数返回2、调用exit()函数3、调用_exit()或者_Exit()4、最后一个线程通过调用pthread_exit5、最后一个线程通过启动例程返回6、接收到一个信号并且终止7、最后一个进程对取消请求作出相应8、调用abort()函数在上面进程终止的八种方式当中,其中前5种是正常退出的,然而最后三种是异常退出的ate

2017-04-21 09:40:30 485

原创 【面试题】剑指Offer-47-不用加减乘除做加法

题目概述解题思路比如16+9我们会怎么加呢步骤1:先不进位,算出结果为 16+9=15(没有进位)步骤2:找出进位的位置,9+6会产生进位,也就是个位1,左移一位成为十位是进位10步骤3:将没有进位的结果加上进位的结果 15+10 = 25你可能会问:上面的步骤和解决这道题目有什么关系呢?题目不让用加减乘除,但是可以用位运算求解异或所得到的结果是不带进位的结

2017-04-20 12:16:15 450

原创 【面试题】剑指Offer-46-从1加N

题目概述解题思路这道题目不能用循环,同时呢,禁用了if等判断语句表示也不可以用递归求解这道题目考的是对C++语法内容的熟练程度这道题目可以从构造函数,虚函数,函数指针以及模板求解方法1:利用构造函数求解我们可以定义一个类,类有两个静态的成员,一个N,一个Sum并初始化为0每当调用构造函数时,N++,然后用Sum加上当前的N值如此,当我们需要加到X时,便可

2017-04-19 19:50:23 1124

原创 【面试题】剑指Offer-40-数组中只出现一次的数字

题目概述解题思路我们知道,一个数和自己异或的结果是0如果这个整形数组中只有一个数字出现一次的话,全部异或后的结果就是出现一次的数字由于这道题目是两个数字a,b出现了一次,我们也可以将所有的数进行异或得到的结果就是a,b异或的结果ret此时,我们可以根据ret的二进制中任何一位数字为1将整形数组分成两组a,b就分别处于这两组之中然后分别对两组进行所有数字异或

2017-04-19 16:10:39 1077

原创 【linux】进程概念的介绍

本篇博文,旨在介绍进程的一些概念1、什么是进程?进程的概念是什么?对于操作系统来说:进程是正在运行的程序进程是可以分配处理器并由处理器执行的实体而对于Linux内核来说:进程是可担当分配系统资源的实体2、如何描述一个进程如何描述一个进程呢?这里我们要介绍一下PCB了PCB,全称为 进程控制块PCB是用来标识一个进程的,它包含了该进程的各个信息在Linux

2017-04-19 14:48:54 463

原创 【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树

题目概述题目1:求二叉树的深度题目2:判断一颗二叉树是否为平衡二叉树解题思路求二叉树的深度二叉树的深度呢,这个问题比较简单递归遍历一遍二叉树,每到一个节点,便返回左子树和右子树深度较大的那个并+1返回判断一颗树是否为平衡二叉树这里呢,也要用到深度所谓的平衡二叉树,就是左子树的深度和右子树的深度相差的绝对值小于2每到一个节点,便定义

2017-04-18 09:29:44 728

原创 【面试题】剑指Offer-37-求两个链表的第一个公共节点

题目概述解题思路首先,分别求出两个链表L1,L2的长度L1_length,L2_length比较L1_length,L2_length的大小,并求出差值的绝对值K定义两个指针cur1,cur2,分别指向两个链表令长度较长的链表先走K步然后同时走,直到两个指针指向的位置相同停止注意:题目要求的是求两个链表的第一个公共节点,这里我们假设已经确定两条链表是相交

2017-04-17 18:43:51 538

原创 【面试题】剑指Offer-35-第一个只出现一次的字符

题目概述解题思路定义一个256个长度的字符数组将每一个元素初始化成0遍历一遍字符串将遇到字符对应ASCII码的对应数组下标位置的元素+1遍历完后再次重新遍历字符串,将遇到的字符,根据其对应ASCII码的下标来查找从数组的数字如果是1,那么这个字符就是第一次出现一次的字符了代码实现char FindFisrtNum1Char(const char* s

2017-04-13 14:14:03 331

原创 【面试题】剑指Offer-31-求连续子数组的最大和

题目概述解法思路定义tmpSum = 0 和 Sum = 0遍历这个数组当tmpSum小于0时,直接将tmpSum赋值为0当tmpSum不小于0时,将tmpSum加上当前的数字如果tmpSum比Sum大,则更新Sum的值代码实现#includeusing namespace std;pair MaxArrOfNum(int* arr, size_t n

2017-04-12 10:37:56 476

原创 【面试题】剑指Offer-30-最小的第K个数

题目概述解题思路方法1将数组进行排序,排成升序则最小的K个数便是数组的前K个数字了方法2利用快排的思想利用单趟排序如果排的数字是第K个位置那么其以及其左边的数字就是前面最小的了方法3利用STL中的红黑树

2017-04-12 10:29:33 607

原创 【面试题】剑指Offer-29-找到出现次数超过一半的数字

题目概述解题思路方法1进行排序,排序后,超过一半次数的数字一定会出现数组的最中间的位置上方法2利用快排的思想,单次排序,会将数组分成两个区间通过判断所分区间的中间元素是否为数组的中间值来进行逐次划分求解这里和快排很相似,就没有实现时间复杂度为O(N)方法3巧妙思路用两个变量,一个保存当前记录的数字,一个保存次数(初始化为0)遍历一遍数组

2017-04-11 11:42:24 564

原创 【面试题】剑指Offer-27-将二叉搜索树转换成排序的双向链表

题目概述解题思路1、递归求解,中序遍历,先找到最左节点2、定义PrevNode ,记录双向链表中前一个节点3、递归内部,将当前节点Root的left指向Prev4、递归内部,将上个节点Prev的right指向Root注意:第一个节点PrevNode是空的代码实现void Convert(Node* root, Node*& prevNode){ if (

2017-04-10 11:38:06 368

原创 【面试题】剑指Offer-26-复杂链表的复制

题目概述

2017-04-10 10:41:47 348

原创 【面试题】剑指Offer-23-从上往下打印二叉树

题目概述解题思路题目要求的是层序遍历关于层序遍历,我们需要借助辅助的队列从根节点开始,入队然后每次将队头的节点Front的两个孩子Left和Right入队,并将Front出队在出队时,进行打印即可代码实现#includevoid LevelOrder(const TreeNode* root){ if (root == NULL) return;

2017-04-09 14:57:06 507

原创 【面试题】剑指Offer-21-包含Min函数的栈

题目概述这道题目很熟悉了在栈和队列面试题中遇到并讲解过解决方法在栈中多用一个栈来保存最小值当Min栈为空,或者入栈的元素小于Min栈的栈顶元素,则在入元素栈的同时将该元素也一并入到Min栈中从而保证了Min栈的栈顶元素永远都是最小值出栈时,如果出栈的元素是最小元素,则也弹出Min栈的栈顶元素否则,仅仅元素出栈即可代码实现#includeusin

2017-04-09 14:34:26 886 3

原创 【面试题】剑指Offer-20-顺时针打印矩阵

题目概述代码实现//打印单独的一圈void PrintCricle(int matrix[], int columns, int rows, int start){ //定义结束的坐标 int EndX = columns - start; int EndY = rows - start; //从左向右进行打印,需要对其X坐标 for (int j = start;

2017-04-08 19:21:39 500

原创 【面试题】剑指Offer-19-二叉树的镜像

题目概述解题思路首先,我们需要知道什么是二叉树的镜像如图所示,这两颗二叉树便互为镜像实现方法,前序遍历这颗二叉树如果遇到空节点,就返回否则交换两个子孩子遍历完后,便得到了二叉树的镜像代码实现//二叉树的镜像void TreeMirror(TreeNode* root){ if (root == NULL) return; //交换每

2017-04-08 19:17:27 598

原创 【面试题】剑指Offer-18-判断一颗树是否为另一颗树的子树

题目概述解题思路这里用到递归的思想先递归【HasSubTree】找到和子树相同值的节点然后再用另一个递归函数【DoseTree1HasTree2】判断是否相等如果遍历到SubT子树的叶子结点,则匹配成功如果SrcT为空,则匹配没有成功如果都存在,则判断左子树和右子树根据左子树和右子树的返回结果判断此时是否完全匹配如果不匹配,则继续【HasSubTree】

2017-04-06 11:40:27 711

原创 【面试题】剑指Offer-17-合并两个有序的单链表

题目概述解题思路定义两个指针pCur1,pCur2分别遍历两个链表定义pPrev1,pPrev2指向pCur1,pCu2的前一个节点根据pCur1,pCur2指向数据的大小进行判断利用pPrev1,pPrev2改变指向注意1、需要定义pNewHead先判断两个链表头部节点的大小并保存小的节点2、在遍历改变指向的时候,注意指针是否为空3、出循环后,必须

2017-04-06 11:25:02 851

原创 【面试题】剑指Offer-16-反转链表

题目概述解决思路定义指针【pCur】和【pPrev】并定义【pReverseHead】来保存返回后的头结点当【pCur】不为空的时候,进行循环先求出pCur】的下一个节点【pNext】节点,并判断其是否为空(判断【pCur】是否为最后一个节点)如果是,则需要对【pReverseHead】进行赋值否则,将【pCur】的下一个节点的指针指向pPrev】并将【pP

2017-04-05 11:38:17 471

原创 【面试题】剑指Offer-15-求倒数第K个节点

题目概述解决方法用两个指针pSlow和pFastpFast先走上K步然后pSlow和pFast一块走当pFast走到末尾时,pSlow所指向的节点就是倒数第k个节点注意事项注意特殊情况以及临界情况的判断当传入的链表指针为空的情况,以及当传入的K小于链表的长度的情况代码实现

2017-04-05 11:30:19 476

原创 【面试题】剑指Offer-14-调整顺序使奇数位于偶数的前面

题目概述解决思路用两个指针left和right,分别从数组的两端向中间进行遍历如果left找到了一个偶数,right找到一个奇数然后互换直到left和right相等代码实现#includeusing namespace std;#include//判断一个数是否为偶数bool IsEven(int num){ if (num % 2 == 0)

2017-04-04 12:09:50 627

原创 【面试题】剑指Offer-13-在O(1)的情况下删除一个节点

题目概述删除一个节点的普通方法在无头的单链表中我们知道,删除一个节点,需要找到该Del节点的前面一个节点Pre,然后找到删除节点Del的下一个节点Next让Pre的指向下一个的指针指向Next即可当然,不要忘了处理只有一个节点的情况然而,该方法的时间复杂度为O(N)在O(1)的情况下删除一个节点由于函数需要传入头结点和删除的节点,我们可以将删除节点Del的下

2017-04-04 12:00:12 935

原创 【面试题】剑指Offer-12-打印1到N最大的数字

题目概述输入数字N,按顺序打印出从1到最大的N位10进制数字比如输入3,则打印1-999之间的数字解决思路直接写个小函数,用循环求出最大的N位数然后再打印注意:当输入的N很大的时候,很有可能造成越界的情况!改进new出来一串字符数组,长度为N+1从低到高依次改变一个位的数字递归判断每一个位如果递归达到长度为N的数字,则打印代码实现#include

2017-04-03 20:14:35 1326

原创 【STL】空间配置器

本篇博文旨在介绍STL六大组件之一——空间配置器的概念;介绍了内存池的概念;介绍了空间配置器的优缺点;最后实现了一个简单的空间配置器

2017-04-01 21:46:17 1220

原创 【Linux】黏滞位

本篇博文旨在介绍Linux中黏滞位的作用及其用法;通过设置黏置位和不设置黏滞位两种情况的对比,从而说明黏滞位的作用黏滞位的作用设置黏滞位便是保证即使一个普通用户具有写权限,但也不能随意删除其他用户里面的文件;只允许文件的拥有者及root用户可以进行删除为什么需要黏滞位?不用黏滞位会怎么样?1、以root用户身份创建一个目录 test,赋予其777的权限2、以

2017-04-01 15:42:25 509

原创 【Linux】find指令

本篇博文旨在介绍find指令的功能,以及命令的参数格式;最后介绍了常用find指令的几种情况find功能find指令用来查找符合特定要求的文件find命令的格式find [-path] -options [-print -exec -ok ]path : 代表需要在该目录以及其子目录中进行查找~ : 表示当前用户的目录以及其子目录/  : 表示根目录及其子目录.

2017-04-01 14:21:14 293

三子棋之C语言实现

一款用C语言做的简易游戏,exe可以直接运行 sanziqi.h是头文件 三子棋.cpp是实现的函数 test.cpp是测试文件,包含main函数

2016-07-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除