![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后台
DigitalNexus
这个作者很懒,什么都没留下…
展开
-
【剑指offer】面试题3:数组中重复的数字【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:找出数组中重复的数字在一个长度为n的数组里的所有数字都在0~n-1范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。...原创 2018-09-07 12:58:50 · 2130 阅读 · 1 评论 -
【剑指offer】面试题63:股票的最大利润【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:股票的最大利润假设把某股票的价格按照时间先后顺序储存在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16的时候卖出,则能收获最大的利润11。解题思路:...原创 2018-08-28 23:08:59 · 1694 阅读 · 2 评论 -
【剑指offer】面试题62:圆圈中最后剩下的数字【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:圆圈中最后剩下的数字0,1,……,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里面删除第m个数字。求出这个圆圈里剩下的最后一个数字。解题思路:1.使用容器模拟一个环形链表来解答。可以AC的解法【C++版本】#include <iostream...原创 2018-08-28 21:26:07 · 561 阅读 · 0 评论 -
【剑指offer】面试题61:扑克牌中的顺子【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:扑克牌中的顺子从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。其中A为1,J为11,Q为12,K为13,而大小王为0,且大小王能够当做任意一张牌。解题思路:1.首先应该对数组进行排序。 2.统计数组中大小王(0)出现的个数。 3.统计数组中所有相邻数...原创 2018-08-28 20:08:41 · 1043 阅读 · 0 评论 -
【剑指offer】面试题60:n个骰子的点数【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:滑动窗口的最大值把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。解题思路:1.解法一可以使用递归来求解。详细代码见书。 2.解法二的思路为:在一轮循环当中,第一个数组总的第n个数字表示骰子和为n出现的次数。在下一轮循环中,我们...原创 2018-08-28 19:23:06 · 1172 阅读 · 0 评论 -
【剑指offer】面试题59:滑动窗口的最大值【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:滑动窗口的最大值给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5}。解题思路:1.这个题目需要使用双向队列deque来进行解答...原创 2018-08-28 19:20:53 · 596 阅读 · 0 评论 -
【剑指offer】面试题53:在排序数组中查找数字【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:数字在排序数组中出现的次数。统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,应该输出4。解题思路:1.遍历数组的复杂度为O(n),要找比该复杂度更低的算法,那么就能想到二分查找,其复杂度为O(logn)。 2.使用二分查找找到该数字...原创 2018-08-24 12:08:50 · 578 阅读 · 0 评论 -
【剑指offer】面试题1:赋值运算符函数【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:赋值运算符函数如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString {public: //构造函数 CMyString(char *pData = nullptr); CMyString(const CM...原创 2018-08-31 12:04:19 · 1688 阅读 · 1 评论 -
【剑指offer】面试题58:翻转单词顺序/左旋转字符串【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出“student. a am I”。解题思路:1.第一步翻转句子中的所有字符,例如“I am a s...原创 2018-08-28 15:39:42 · 624 阅读 · 0 评论 -
【剑指offer】面试题57:和为S的两个数字/和为S的连续正数序列【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:和为s的两个数字输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。解题思路:1.使用hash表能够实现O(n)的时间复杂度,但是额外需要O(n)的空间,所以不是特别好。 2.应该抓住这里数组是一个递增...原创 2018-08-28 11:01:02 · 403 阅读 · 0 评论 -
【剑指offer】面试题54:二叉搜索树的第K大节点【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:给定一棵二叉搜索树,请找出其中第K大的节点。 树的节点的定义为:struct treeNode { int val; treeNode *left; treeNode *right; treeNode(int x) :val...原创 2018-08-24 20:06:14 · 2131 阅读 · 1 评论 -
【剑指offer】面试题64:求1+2+...+n【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:求1+2+…+n求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字即条件判断语句(A?B:C)(A?B:C)(A?B:C)。解题思路:1.可以使用类的构造函数来解决,这个方法可以好好看看,因为很多小细节。比如使用类名来调...原创 2018-08-29 17:07:24 · 654 阅读 · 0 评论 -
【剑指offer】面试题65:不用加减乘除做加法【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算符。解题思路:1.不能用四则运算那就使用位运算。 2.按照《剑指offer》上面的方法分三步分析:第一步各位相加但是不计进位,两个1和两个0相加的结果都为0,1和0相加的结果为1,这里可以...原创 2018-08-29 18:11:27 · 315 阅读 · 0 评论 -
【剑指offer】面试题2:单例模式【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:实现singleton模式设计一个类,我们只能生成该类的一个实例。解题思路:1.这个题《剑指offer》上面使用的是C#来解答,这里给出一种C++的解答方式,和原书中的解法三比较相似。实现单例模式【C++版本】//注意到实现中m_pInstance和GetInsta...原创 2018-09-06 17:52:10 · 917 阅读 · 0 评论 -
【剑指offer】面试题10:斐波那契数列【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:斐波那契数列求斐波那契数列的第n项。斐波那契数列的定义如下:f(0) = 0;f(1) = 1;f(n) = f(n - 1) + f(n - 2); n >= 2解题思路:1.使用递归的方法是最简单的,但是效率成问题,有很多重复的计算。其实就是一种自顶向下的...原创 2018-09-08 22:13:35 · 724 阅读 · 0 评论 -
【剑指offer】面试题9:用两个栈实现队列【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个成员函数,分别完成在队列尾部插入节点和在队列的头部删除节点class solution{public: void push(int node); int pop();private: ...原创 2018-09-08 21:38:36 · 535 阅读 · 0 评论 -
【剑指offer】面试题8:二叉树的下一个节点【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:二叉树的下一个节点给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了指向左右子树的指针,还有一个指向父节点的指针。树节点定义如下:struct TreeLinkNode { int val; struct TreeLinkNode...原创 2018-09-08 21:19:06 · 643 阅读 · 0 评论 -
【剑指offer】面试题7:重建二叉树【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树(假设没有重复数字)。树节点定义如下:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(in...原创 2018-09-08 17:46:15 · 1920 阅读 · 0 评论 -
【剑指offer】面试题6:从尾到头打印链表【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:从尾到头打印链表输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2018-09-08 16:39:50 · 622 阅读 · 0 评论 -
【剑指offer】面试题5:替换空格【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:替换空格请实现一个函数,把字符串中的每个空格替换成“%20”,例如,输入”We are happy.”,则输出”We%20are%20happy.”。解题思路:本题主要考察对字符串的处理 一般像这种需要向后扩充容量重新整理内存的,最好能够考虑到从尾部开始整理的方法 1...原创 2018-09-07 19:57:44 · 785 阅读 · 0 评论 -
【剑指offer】面试题4:二维数组中的查找【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。。解题思路:1.目标数为T,从二维数组的最右上角开始查找,如果T比该数字小,说明T比该数...原创 2018-09-07 19:28:52 · 575 阅读 · 0 评论 -
【剑指offer】面试题66:构建乘积数组【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:构建乘积数组给定一个数组A[0,1,...,n−1]A[0,1,...,n−1]A[0,1,...,n-1],请构建一个数组B[0,1,...,n−1]B[0,1,...,n−1]B[0,1,...,n-1],其中BBB的元素B[i]B[i]B[i] = A[0]∗A[1]∗......原创 2018-08-29 20:37:34 · 469 阅读 · 0 评论 -
【剑指offer】面试题52:两个链表的第一个公共节点【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:输入两个链表,找出它们的第一个公共节点。链表节点定义如下:struct ListNode { int m_nKey; ListNode* m_pNext;};解题思路:1.这个题主要需要抓住一点,观察链表节点构造发现是一个单向链表,且对于一个节...原创 2018-08-23 22:34:30 · 576 阅读 · 0 评论 -
【剑指offer】面试题51:数组中的逆序对【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7,5,6,4}中,一共存在5个逆序对。解题思路:1.强解的复杂度太高了。 2.使用二分的思路来求解。具体解题思路见书可以AC的解法【C++...原创 2018-08-23 21:29:17 · 1230 阅读 · 1 评论 -
【剑指offer】面试题15:二进制中1的个数【C++版本】
题目:请实现一个函数,输入是一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。因此,如果输入9,则该函数输出为2。解题思路:1.不对数据进行移位,而是移位和数据进行与操作的1。因为移位数据可能会因为符号位而造成死循环 2.O(1)的解法。使用公式n&amp;amp;nbsp;=&amp;amp;nbsp;(n-1)&amp;amp;amp;n;n&amp;amp;nbsp;=&原创 2018-06-12 19:26:29 · 847 阅读 · 1 评论 -
【剑指offer】面试题48:最长不含重复字符的子字符串【C++版本】
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含&amp;amp;amp;amp;nbsp;′&amp;amp;amp;amp;nbsp;a&amp;amp;amp;amp;nbsp;′&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;′a′'a'~&amp;amp;amp;amp;nbsp;′&amp原创 2018-06-11 21:24:59 · 2495 阅读 · 1 评论 -
vim多文件编辑、可视模式、视窗操作和功能设定
2.1 多文件编辑2.1.1 使用vim编辑多个文件编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件。另一种就是进入vim后再编辑其他的文件。同时创建两个新文件并编辑,默认进入1.txt文件的编辑界面vim filename1 filename2 //同时(创建)并打开文件1和文件2命令行模式下输入:n(next)编辑2.txt文件,可以加!即:n!强制切换,之前一...翻译 2018-04-28 15:11:45 · 561 阅读 · 0 评论 -
vim中的查找替换和撤销操作
2.1 字符的替换及撤销(Undo操作)2.1.1 替换和撤销(Undo)命令替换和Undo命令都是针对普通模式下的操作r即replace,替换练习:2.2 快速缩进2.2.1 使用命令进行快速调整缩进操作普通模式下输入15G,跳转到15行普通模式下输入>> 整行将向右缩进(使用,用于格式化代码超爽)普通模式下输入<< 整行向左回退普通模式下输入:进入命令行模式下对shif...翻译 2018-04-28 15:06:08 · 2628 阅读 · 0 评论 -
Vim文档编辑——游标跳转,复制粘贴剪切
2.1 vim重复命令2.1.1 重复执行上次命令在普通模式下.(小数点)表示重复上一次的命令操作2.1.2 执行指定次数相同的命令进入普通模式输入N<command>,N表示重复后面的次数,10dd //就是一个N<command>的例子,进行10次删除操作在普通模式下,你还可以使用dw或者daw(delete a word)删除一个单词,所以你可以很容易的...翻译 2018-04-28 14:58:48 · 296 阅读 · 0 评论 -
Vim 快速入门——模式介绍、删除保存退出
2.1 vim模式介绍1.普通模式(Normal mode)在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下...翻译 2018-04-28 14:56:01 · 936 阅读 · 0 评论 -
进程间通信
进程间通信(Inter Process Communication,IPC)就是在不同进程之间传播或交换信息进程间通信至少可以通过传送、打开文件来实现Linux几乎支持所有的UNIX下常用的进程间通信方法:管道、消息队列、共享内存、信号量、套接字等管道、消息队列、共享内存、信号量用于同一台机器上面进程间的通信,而套接字主要用于不同机器之间的网络通信一、管道头文件:#include <unis...翻译 2018-04-11 03:52:52 · 136 阅读 · 0 评论 -
进程
进程是计算机中处于运行中的程序的实体线程是最小的运行单位,而进程是线程的容器程序本身只是指令、数据及其组织形式的描述,进程才是程序(指令和数据)的真正运行实例一、程序与进程Linux进程结构一般由三部分组成:代码段、数据段和堆栈段代码段:用于存放程序代码的数据:如果机器中有多个进程运行相同的一个程序,那么它们就可以使用同一段代码数据段:存放程序的全局变量、常量和静态变量堆栈段:栈用于函数调用,存放...翻译 2018-04-11 03:52:12 · 271 阅读 · 0 评论 -
多线程
进程是包含程序指令和相关资源的集合,进程是CPU资源分配的最小单元线程是CPU调度的最小单元每次进程切换,都存在进程资源的保存和恢复动作,称为上下文切换 对每个进程来说,系统资源看起来都是独占的同一个进程内部有多个线程,共享的是同一个进程的所有资源(线程共享了哪些资源????),如内存空间等。通过线程可以支持同一个应用程序内部的并发,免去了进程频繁切换的开销,且并发任务间通信也更简单同一进程间的线...翻译 2018-04-11 03:51:37 · 200 阅读 · 0 评论 -
【剑指offer】面试题14:剪绳子【C++版本】
题目:给一段长度为n的绳子,把绳子剪成m段(m,n都是整数且n&amp;gt;1,m&amp;gt;1,即至少要剪一次),问每段绳子长度的乘积最大是多少?求解思路:1.使用动态规划求解: 2.确定子问题:例如绳子的长度为8,那么可以剪成1,7两段,那么此时又要求解长度为7的绳子怎么剪最好。依次类推。 3.确定转移方程,设方程f(i)&amp;nbsp;f(i)f(i)表示长度为i&amp;nbsp;ii的绳子剪成...原创 2018-06-12 17:24:20 · 1977 阅读 · 0 评论 -
【剑指offer】面试题50:(字符流中)第一个只出现一次的字符【C++版本】
题目:字符串中第一个只出现一次的字符。在字符串中找出第一个只出现一次的字符。如输入&amp;quot;abaccdeff&amp;quot;&amp;amp;nbsp;&amp;quot;abaccdeff&amp;quot;&amp;quot;abaccdeff&amp;quot;,则输出&amp;amp;nbsp;′&amp;amp;nbsp;b&a原创 2018-06-12 15:50:50 · 1115 阅读 · 0 评论 -
【剑指offer】面试题49:丑数【C++版本】
题目:我们把只包含因子2,3,5的数称作丑数。求按从小到大的顺序的第1500个丑数。例如,6,8都是丑数,但14不是丑数,因为它包含因子7。习惯上我们把1当作第一个丑数。解题思路:1.首先要理解丑数的概念。换个角度理解,因为丑数只能被2,3,5整除。也就是说,如果一个数能被2整除,就继续除以2,能被3整除,就继续除以3,能被5整除,就继续除以5。这样到最后得到的结果是1,那么这个数...原创 2018-06-12 11:34:48 · 1149 阅读 · 0 评论 -
【剑指offer】面试题56:数组中数字出现的次数【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:数组中只出现一次的两个数字一个整形数组中除了两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。解题思路:1.注意到时间复杂度是O(n)而空间复杂度是O(1)。 2.看到这种出现偶数次数的情况,都可以考虑...原创 2018-08-27 20:20:37 · 839 阅读 · 0 评论 -
【剑指offer】面试题55:二叉树的深度/二叉平衡树【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:题目一:二叉树的深度 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 树的节点的定义为:struct TreeNode { int val; treeNode *left;...原创 2018-08-27 17:21:28 · 598 阅读 · 1 评论 -
【剑指offer】面试题45:把数组排成最小的数【C++版本】
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如:输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323解题思路:1.制定一种新的排序规则,数组根据这个规则排序之后能够排成一个最小的数字。 2.要制定新的排序规则,就必须制定新的比较规则,即通过比较m和n,来确定哪一个应该排在前面(即哪一个更“小”)...原创 2018-06-09 16:33:57 · 1306 阅读 · 0 评论 -
【剑指offer】面试题13:机器人的运动范围【C++版本】
20180608题目:地上有一个m行n列的格子,一个机器人从(0,0)开始移动,它每次可以向上、下、左、右移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k等于18时,机器人能够进入方格(35,37),因为3+7+3+5 = 18。但是它不能进入方格(35,38),因为3+5+3+8 = 19 &amp;gt; 18。请问该机器人能够进入多少个格子?解题思路...原创 2018-06-08 22:03:40 · 1041 阅读 · 0 评论