自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++内存管理详解以及内存泄露的检测

文章目录前言一、C/C++内存分布?内存存放的数据类型二、C/C++内存管理1.C内存管理2.C++内存管理总结前言这篇博客主要介绍一些C/C++的内存管理机制,包括C/C++内存分布、申请释放内存方式及底层实现的简单解释、内存泄漏、内存泄漏的检测、如何防止内存泄漏,若有错误之处还请指正。一、C/C++内存分布?## 1.内存布局示意图:内存存放的数据类型栈:非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库..

2020-10-24 19:59:17 416

原创 C++智能指针使用和详解

智能指针即将资源交给一个对象来管理,在其生命周期内资源一直可用,对象生命周期结束后会自动调用析构释放资源。C++ STL智能指针主要包括auto_ptr、unique_ptr、unique_ptr、shared_ptr、weak_ptr在这里插入代码片...

2020-10-24 15:10:54 459

原创 对称二叉树

//请实现一个函数,用来判断一棵二叉树是不是对称的。//注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: bool isSymmetrical(TreeN

2020-10-04 19:31:00 190

原创 二维数组中的查找

//在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,//每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个//整数,判断数组中是否含有该整数。#include<vector>#include<iostream>using namespace std;class Solution {public: bool Find(int target, vector<vector<int>> ar

2020-10-04 16:22:17 155

原创 矩形覆盖

我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?比如n=3时,23的矩形块有3种覆盖方法:class Solution {public: int rectCover(int number) { //规律题,列出前几个即可发现规律 //类似斐波那契数列 if (number == 0) return 0; int first = 1, second = 2; int sum = 0; for (in

2020-10-04 15:05:56 337

原创 链表倒数第k个结点

输入一个链表,输出该链表中倒数第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) { //快慢指针,转化为正数第几个 unsigned int temp =

2020-10-04 15:03:32 310

原创 两句话中不常见单词

//给定两个句子?A?和?B?。?(句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)////如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。////返回所有不常用单词的列表。////您可以按任何顺序返回列表。////来源:力扣(LeetCode)//链接:https ://leetcode-cn.com/problems/uncommon-words-from-two-sentences//著作权归领扣网络所有。商业转载请联系官方授权,

2020-10-04 15:00:54 111

原创 迷宫问题--Dfs

链接:https://www.nowcoder.com/questionTerminal/cf24906056f4488c9ddb132f317e03bc来源:牛客网定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,

2020-10-04 14:53:24 207

原创 年终奖

小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。class Bonus {

2020-10-04 14:40:38 141

原创 树的子结构

输入两棵二叉树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: //判断树proot2是否是pr

2020-10-04 14:37:50 56

原创 数值的整数次方

/给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0/解法一:循环求解class Solution {public: double Power(double base, int exponent) { if (base == 0) return 0.0; if (exponent == 0) return 1.0; //整数包含负数,2^-3=(1/2)^3; if (e

2020-10-04 14:15:30 70

原创 替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char* str, int length) { if (str == nullptr || length <= 0) return; int space_count = 0; //统计空格数量 for (int i = 0; i &

2020-10-04 14:06:34 71

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

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector<int>& array) { //开辟辅助数组.先插入奇数后插入偶数 vector<int> ret(array.size(), 0); int index = 0; for (int i

2020-10-03 17:55:21 131

原创 字符流中第一个不重复的字符

#include<unordered_map>#include<queue>using namespace std;class Solution{public: //Insert one char from stringstream //队列元素无重复,且保证字符顺序 queue<char> q; //统计每个字符出现的次数 unordered_map<char, int> um; //插入字符 void Insert(char ch)

2020-10-03 17:53:27 65

原创 最长不重复子串

给定一个字符串,找出最长的不具有重复字符的子串的长度。例如,“abcabcbb”不具有重复字符的最长子串是“abc”,长度为3。对于“bbbbb”,最长的不具有重复字符的子串是“b”,长度为1。//解法一,暴力搜索法#include<unordered_map>class Solution {public: /** * * @param s string字符串 * @return int整型 */ int lengthOfLongestSubstring(stri

2020-10-03 17:49:18 331

原创 最长回文子串

/*给定一个字符串 s,找到 s 中最长的回文子串。你可以假设?s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/class Solution {

2020-10-03 17:24:37 66

原创 被围绕的区域--Dfs

/*给定一个二维的矩阵,包含?‘X’?和?‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的?‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的?‘O’?都不会被填充为?‘X’。任何不在边界上,或不与边界上的?‘O’?相连的?‘O’?最终都会被填充为?‘X’。如果两个元素在水平或垂

2020-10-03 17:07:54 185

原创 岛屿的周长--Dfs

/*给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地?0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/island-

2020-10-03 17:05:39 122

原创 岛屿的最大面积-Dfs

/*给定一个包含了一些 0 和 1 的非空二维数组?grid 。一个?岛屿?是由一些相邻的?1?(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设?grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/max-area-of-island著作权归领扣网络所有。商业转载请联系官方授权,非商业

2020-10-03 17:02:59 121

原创 岛屿数量--Dfs

/*给你一个由?‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-islands著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*//*示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1

2020-10-03 17:01:22 93

原创 图形渲染--Dfs

/*有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标?(sr, sc)?表示图像渲染开始的像素值(行 ,列)和一个新的颜色值?newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染后

2020-10-03 16:49:21 121

原创 员工的重要性--Dfs

/*给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度?和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。现在输入一个公司的所有员工信息,以及单个员工id,返回这个员工和他所有下属的重要度之和。来源:力扣(

2020-10-03 16:40:16 71

原创 二进制中1的个数

给一个整数判断二进制中1的个数,包含负数,负数用补码表示。因为存在负数,所以无法直接按位&1,后右移一位,因为负数会一直在最高位补1.造成死循环。n&(n-1)原来n的二进制表示中最低位的1就会变为0,这种方法效率高,会直接跳过与二进制0的判断。class Solution {public: int NumberOf1(int n) { int count=0; while(n!=0){ count++

2020-08-18 18:18:14 94

原创 重建二叉树,根据前序中序遍历构建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。前序遍历:根左右中序遍历:左根右根据前序遍历我们可以知道根节点,根据中序遍历我们可以知道根节点的左右子树结点有哪些。如:前序:{1,2,4,7,3,5,6,8} 中序{4,7,2,1,5,3,8,6}根据前序:知道根为 1,那么左子树就为中序的下标0-2,

2020-08-18 16:14:58 102

原创 旋转数组的最小数字

| 大 | 小 | mid midclass Solution {public: int minNumberInRotateArray(vector<int> rotateArray) { int left=0,right=rotateArray.size()-1; while(left<right){ if(rotateArray[left]<rota

2020-08-17 15:01:15 82

原创 反转单链表

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==nullptr) return pHead; ListNode* tmp=n

2020-08-17 13:25:51 81

原创 合并两个有序单链表

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode* head=new ListNode(1); ListNode* cur=h

2020-08-17 13:25:06 89

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

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二叉搜索树按中序遍历有序,因此我们只需按照中序遍历的顺序修改指向,但是如何知道left该指向的前一个节点了,所以我们需要一个指针pre在遍历时保存前一个结点。pre赋初值为nullptr若pre不为nullptr,所以pre为当前根节点中序的前一个结点,修改指向即可。当遍历到最左节点时,此时pre==nullptr,则只需要将当前根赋给pre就行,因为最左节点的left指向为nullp

2020-08-17 12:38:53 99

原创 变态跳台阶

//一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙//上一个n级的台阶总共有多少种跳法。假设跳上第n阶台阶的方法有f【n】种,若最后一次跳1机,则前面需要跳n-1,所以有f(n-1)种;最后一次跳两级,则前面需要跳n-2级,则有f(n-2)种跳法,,,,依次类推,得f(n)=f(n-1)+f(n-2)+...+f(1)+f(0)类比得f(n-1)=f(n-2)+...+f(1)+f(0)因此f(n)=2*f(n-1);也可以通过依次列举看出规律f[0]=f[1]=1;

2020-08-17 11:29:49 78

原创 二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL)

2020-07-29 21:38:20 79

原创 把二叉树打印成多行

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public://与二叉树的层序遍历类似,使用队列,只不过需要增加一层循

2020-07-29 20:39:58 86

原创 数据流的中位数

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。class Solution {public://用来保存数据流 vector<int> date; void Insert(int num) { date.push_ba

2020-07-29 20:07:03 94

原创 剪绳子

给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入复制8输出复制18//记忆化递归class Solution {public:/

2020-07-29 19:48:12 61

原创 前K个高频单词

给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “day”, “is”, “sunny

2020-06-24 16:21:38 254

原创 二叉树的镜像

操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 /*struct TreeNode { int val; struct TreeNode *left; stru

2020-06-14 17:54:32 102

原创 栈的压入弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { /

2020-06-14 17:27:03 110

原创 只出现了一次的数字i,ii

i、给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。//0^a=a,a^a=0;异或遵循结合律,所以最后只剩0异或只出现一次的数字 class Solution {public: int singleNumber(vector<int>& nums) { int a=0; for(const auto& e:nums){ a=a^e;

2020-06-14 14:06:21 146

原创 删除排序数组中的重复项

原地操作//解法一,统计前移步数class Solution {public: int removeDuplicates(vector<int>& nums) { int count=0; //统计需要前移的步数 for(int i=1;i<nums.size();++i){ if(nums[i-1]==nums[i]){ count++; }

2020-06-14 13:44:54 76

原创 扑克牌大小

3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。基本规则:(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证...

2020-03-11 21:57:43 141

原创 手套

/*在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组lef...

2020-03-11 18:36:31 115

空空如也

空空如也

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

TA关注的人

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