自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 字符串转义为整形数字的字典

将字符串转义成一个对应的固定数字。

2022-10-24 23:07:12 151 1

原创 内存泄漏&获取dump文件

在我们编写代码的过程中,避免不了内存泄漏问题和程序崩溃问题,常常为寻找程序崩溃点而烦恼。这篇文章主要为解决程序崩溃而写。以下是代码头文件getDump.h。

2022-10-24 22:47:44 593

原创 CHECK语句

一个健壮的程序往往需要做很多的异常判断,使用if语句判断异常不仅会影响代码整体的美观,也会影响别人阅读代码的主要逻辑,异常判断在阅读代码逻辑时可忽略,因此我们可以将几种常用的if异常判断语句封装起来,在阅读代码逻辑时可忽略异常判断。将这段宏函数放到程序的config.h中即可。

2022-10-24 22:18:49 336

原创 整数中1出现的次数(从1到n整数中1出现的次数)

题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。解题思路:我用的是很愚笨的方法解决这道题的,没啥好说,高档的解题...

2020-04-07 20:54:35 150

原创 最小的K个数

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.解题思路:用最大堆保存这k个数,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。(本题考查的是最大堆的实现)class Solution {public: vector<int> GetLeastNumbers_Sol...

2020-04-07 20:18:18 122

原创 连续子数组的最大和

题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是向量中包含负数,是否用该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为之)。给一个数组,返回它的最大连续子序列的...

2020-04-07 20:10:52 145

原创 数组中出现次数超过一半的数字

题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了五次,超过数组长度的一半,因此数组2.如果不存在则输出0。解题思路:本题有很多解法,我采用的是摩尔投票算法,时间复杂度为O(n),空间复杂度为O(1)。class Solution {public: ...

2020-04-05 19:31:04 113

原创 字符串的排列

题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路:递归法,问题转换为先固定第一个字符,求剩余字符的排列;求剩余字符排列时跟原问题一样。(1)遍历出所...

2020-04-04 14:52:51 337

原创 二叉搜索树与双向链表

题目描述:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:非递归:中序遍历二叉树,第一步:找到链表的头结点head。第二步:将结点压入栈中,直到所有的左子树进栈。 第三步:将栈顶元素赋值给p,p的左指针指向pre(用来保存中序遍历的上一结点),若pre不为空,则将p的右指针指向pre的右指针指向p。第四步:将p...

2020-04-04 14:03:28 113

原创 求1+2+3+...+n

题目描述:求1+2+3+……+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句。解题思路:利用&&短路来实现 if的功能,构造递归:重点是输入0的时候输出0来结束递归class Solution {public: int Sum_Solution(int n) { int ...

2020-04-03 20:33:47 226

原创 复杂链表的复制

题目描述:输入一个复杂链表(每个结点中有节点值,以及两个指针,一个指向下一个结点,另外一个特殊指针指向任意一个结点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的结点引用,否则判断程序会直接返回空)解题思路:遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面。 重新遍历链表,复制旧结点的随机指针给新结点。 拆分链表,将链表拆分为原链表...

2020-04-03 20:06:51 110

原创 二叉树中和为某一值的路径

题目描述:输入一颗二叉树的根结点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶子结点所经过的结点形成一条路径。(注意:在返回值的list中,数组长度大的数组靠前)解题思路:递归先序遍历树,把结点加入路径。若该结点是叶子结点且当前路径和等于期待和。弹出结点,每一轮递归返回到父节点时当前路径也应该回退一个结点。class So...

2020-04-03 19:23:56 100

原创 二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路:1. 后序遍历序列的最后一个元素为二叉树的根节点;2. 二叉搜索树左子树上所有的结点均小于根结点、右子树所有的结点均大于根结点。算法步骤如下:1. 找到根结点;2. 遍历序列,找到第一个大于等于根结点的元素i,则i...

2020-04-03 16:26:21 157

原创 从上到下打印二叉树

题目描述:从上打印出二叉树的每一个节点,同层节点从左至右打印。解题思路:的class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; if(NULL == root) //代码...

2020-04-03 15:47:28 104

原创 栈的压入、弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序,假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断...

2020-04-03 15:28:13 108

原创 包含min函数的栈

题目描述:定义栈的数据结构,请在该类型中实现一个功能得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或top()方法。解题思路:用一个辅助栈来保存最小元素,称为最小元素栈。每次压栈操作时, 如果压栈元素比当前最小元素更小, 就把这个元素压入最小元素栈, 原本的最小元素就成了次小元素. 同理, 弹栈时, ...

2020-04-03 15:08:11 109

原创 顺时针打印矩阵

题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字,例如,如果输入如下4*4矩阵:[1 2 3 4], [5 6 7 8] [9 10 11 12] [13 14 15 16] 则依次打印出数字 [1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]解题思路:用左上和右下的坐标定位出依次要旋转打印的数据,一次旋转...

2020-04-03 14:16:40 148

原创 二叉树的镜像

题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:解题思路:总共有三种方法,非递归有队列、栈两种方法。非递归:栈实现,第一步:根节点不为空将根节点压入栈中。第二步:将栈顶的元素出栈,赋值给p,若p的左右结点不都为空,则交换左右子树的值。第三步:若该结点的左子树不为空则将该节点的左子树压入栈中,若结点的右子树不为空将右子树压入栈中。 第四步:一直循环,直到栈为空...

2020-04-02 20:03:34 119

原创 树的子结构

题目描述:输入两棵二叉树A、B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路:遍历A树,找到与B树根节点相同的结点,再将它们的左右子树比较,直到B树为空。则返回true。class Solution {public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {...

2020-04-02 19:20:47 123

原创 合并两个排序的链表

题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减的规则。解题思路:两种解题思路,一种就是很普遍的递归法,第二种就是循环。我们能不能递归最好不用递归。循环:若链表1的头结点小于链表2的头结点,则链表1的头结点是合并后的头结点。遍历链表1、链表2,若链表1或链表2先遍历完,则将链表1或链表2未遍历完的部分直接拼接到合并链表后。...

2020-04-02 13:46:05 138

原创 反转链表

题目描述:输入一个链表,反转链表后,输出新链表的表头。解题思路:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(Li...

2020-04-02 12:47:42 98

原创 链表中倒数第k个结点

题目描述:输入一个链表,输出该链表中倒数第k个结点。解题思路:设置两个指针 p 、q,p先走k步,如果走不到第k步(NULL结点是可以走到的,但是NULL结点没有next,所以只能走到NULL),说明链表长度不够k,直接返回NULL;然后,令 p 和 q 开始同步往下移动,直到 p移动到NULL,此时q就是倒数第 k 个节点的,返回q即可class Solution {publ...

2020-04-02 12:36:55 111

原创 调整数组顺序使奇数位于偶数前面

题目思路:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。例如:{1, 2, 3, 4, 5, 6, 7} 调整后为:{1, 3, 5, 7, 2, 4, 6}。解题思路:根据插入排序的方法将奇数插到数组前面,偶数移动到后面。class Solutio...

2020-04-02 11:59:58 118

原创 数值的整数次方

题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0.解题思路:一种是常规的解题方法,一种是运用快速幂的方法求解。常规的运算法有个很大的缺点,时间复杂度为O(n),例如3^999常规法要循环999次,显然这种方式不可取的,所以我们需要一种更高效的算法,来解决这个问题——快速...

2020-04-02 11:22:13 100

原创 二进制中1的个数

题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路:两种解法:第一种:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减...

2020-04-01 20:59:30 152

原创 矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重复地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:依然是斐波那契数列,跟跳台阶是一样的做法。下面分享两种做法:循环:class Solution {public: int rectCover(int number) { ...

2020-04-01 20:47:32 128

原创 变态跳台阶

题目描述:一直青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶有多少种跳法。解题思路:每个台阶可以看作一块木板,让青蛙跳上去,n个台阶就有n块木板,最后一块木板是青蛙到达的位子,必须存在,其他 (n-1) 块木板可以任意选择是否存在,则每个木板有存在和不存在两种选择,(n-1) 块木板就有 [2^(n-1)] 种跳法,可以直接得到结果。...

2020-04-01 20:28:27 118

原创 跳台阶

题目描述:一直青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)解题思路:对于本题,前提只有 一次 1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假...

2020-04-01 20:18:33 110

原创 斐波那契数列

题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解题思路:有三种解题方法,第一种就是普通的循环,第二种就是递归,第三种是动态规划循环:class Solution {public: int Fibonacci(int n) { if(n <= 1) ...

2020-04-01 20:01:23 242

原创 旋转数组的最小数字

题目描述把一个数组最开始得到若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路:二分法:需要考虑三种情况:(1) array[mid] &...

2020-04-01 16:42:27 137 1

原创 用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型解题思路:stack1用来做入队列,stack2用来做出队列。当stack2为空时,将stack1中的所有元素压入stack2中,同时将stack1中的元素出栈。当stack2不为空时,直接将栈顶元素出队。class Solution{public: void pus...

2020-04-01 15:46:29 105

原创 重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路:根据前序遍历的性质,第一个元素必然就是root,那么下面的工作就是如何确定root的左右子树的范围。根据中序遍历的性质,root元素前面都...

2020-04-01 15:32:18 102

原创 从尾到头打印链表

题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:我觉得可以学的有两种思路,第一种是利用栈先入后出的特性,先将所有的元素压入一个栈中,再将栈顶元素依次存入数组中。第二种就是递归。第一种非递归法:class Solution{public: vector<int> printListFromTailToHead(ListNode* head...

2020-04-01 12:12:12 120

原创 替换空格

题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路从前往后替换,后面的字符要不断地往后移动,要多次移动,效率低下。所以从后往前移动,先计算需要多少空间,然后从后往前移动,则每个字符只会移动一次,这样效率更高一点。class Solution{public: voi...

2020-04-01 11:37:08 107

原创 二维数组中的查找

题目描述:在一个二维数组中(每一个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该数。解题思路:矩阵是有序的,从左下角来看,向上数字是递减的,向右数组是递增的,因此从左下角开始查找,当要查找的数字比左下角的大时,右移一步;当查找的数字小时,向上移动一步。class Soluti...

2020-03-31 22:12:12 154

原创 剑指offer——67道题目汇总

文章目录数组矩阵位运算特殊数与数位字符串栈和队列链表树查找与排序动态规划与贪婪法回溯法和暴力枚举法分治法发散思维题数组矩阵位运算特殊数与数位字符串栈和队列链表树查找与排序动态规划与贪婪法回溯法和暴力枚举法分治法发散思维题...

2020-03-31 21:51:22 938 1

原创 进程调度

文章目录1. 进程调度1.1 时机1.2 切换与过程1.3 方式1. 进程调度1.1 时机进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。需要进行进程调度与切换的情况当前运行的进程主动放弃处理机进程正常终止运行过程中发生异常而终止进程主动请求阻塞(如:等待I/O)当前运行的进程被动放弃处理机分给进程的时间片用完有更紧急的事需要处理(如...

2020-03-19 21:14:31 354

原创 剑指offer——算法题及解题思路

文章目录二维数组中的查找未完待续二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:矩阵是有序的,从左下角来看,向上数字是递减的,向右数字是递增的,因此从左下角开始查找,当要查找的数字比左下角大时,右移一步;当要查找的数...

2020-03-18 11:56:51 187

原创 牛客网刷题——day1

文章目录神奇的数字未完待续神奇的数字题目描述将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出。示例1:输入:“1234”输出:“1432”说明:第2、4位为偶数,所以将其翻转后,得到 1432示例2:输入:“12346”输出: “16342”说明:第2、4、5位为偶数,所以将其翻转后,得到 16342备注:...

2020-03-17 22:05:13 391

原创 处理机调度的概念、层次

文章目录基本概念三个层次三层调度的联系、对比补充知识基本概念当有一堆任务要处理,但由于资源有限,,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。在多道程序系统中,进程的数量往往是多于处理机个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。exp:银行...

2020-03-16 21:19:02 373

空空如也

空空如也

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

TA关注的人

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