自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 210. 课程表 II(拓扑排序)

LeetCode 课程表 拓扑排序 深度优先搜索(dfs)

2022-08-20 20:32:17 299 1

原创 动态规划经典状态分解

动态规划

2022-06-13 18:24:48 249

原创 并查集详解与例题

超容易理解超详细的并查集详解(一个大佬写的超详细):并查集详解LeetCode 547 省份数量class Solution { public: vector<int> father; int find(int x) { // 查父节点 int root = x; while (father[root] != -1) { root = fat

2022-05-28 09:06:45 254

原创 C++ 字符串与整数之间的转换

一、字符串转整数1、利用stoi函数#include<iostream>#include<string>using namespace std;int main(){ string s="99"; int num=stoi(s); cout<<num<<endl; return 0;}2、通过字符流进行转换#include<iostream>#include<string>#incl

2022-05-19 15:22:50 9268

原创 二叉树的递归与非递归的遍历

//https://blog.csdn.net/alxe_made/article/details/94721195#include <iostream>#include <stack>using namespace std;struct Node{ int value; Node *left; Node *right; Node(int value) : value(value), left(nullptr), right(nullptr)

2021-09-10 08:09:04 105

原创 和为某一个值的数组或者路径

1、牛客网 NC46 加起来和为目标值的组合class Solution {public: void dfs(vector<vector<int>>&res,vector<int>&path,vector<int>&num,int cur,int target){ if(target==0){ res.push_back(path); return;

2021-08-30 14:40:58 151

原创 弹幕测试用例

从功能上进行测试1、输入框中是否能输入数字、中文、英文2、文字大小能否改变3、文字颜色能否改变4、文字显示位置5、弹幕的显示范围调节6、弹幕的透明度7、弹幕屏蔽词8、弹幕移动速度9、能否看到自己发送的弹幕10、能否点击别人的弹幕从性能上进行测试1、弱网环境下发送一条弹幕所需要的时间2、发送一条弹幕所耗费的电量、流量3、弹幕文字能够输入的最大长度4、连续发送多条弹幕,最大弹幕数量从兼容性进行测试1、不同视频发弹幕2、不同手机幸好(安卓苹果)3、PC端发送弹幕4、手机不同

2021-08-27 20:03:25 5167

原创 C++输入模式

输入:41 2 3 42 3 4 53 4 5 64 5 6 7方法一:#include <iostream>#include <algorithm>#include <string>#include <sstream>#include <vector>using namespace std;int main(){ string s; vector<vector<int>> num

2021-08-17 15:09:49 132

原创 leetcode dfs剪枝以及bfs

一、字符串的排列题目描述:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。代码如下:class Solution {public: vector<string> permutation(string s) { vector<string>res; string str; vector<int>visited(s.size(),0);

2021-06-23 09:10:12 177

原创 strcmap C++实现

函数原型:int strcmp(const char *dest, const char *source)当dest大于source时,返回大于0的数当dest等于source时,返回0当dest小于source时,返回小于0的数代码如下:int strcmp(char *p1, char *p2){ while (*p1 && (*p1 == *p2)) { p1++; p2++; } if (*p1 - *p2

2021-06-22 15:36:10 185

原创 两个有序数组的第K个元素

题目:给定两个有序数组nums1,nums2,输出这两个数组排序后的第K个元素思路:参考评论1、使用两个变量i和j分别来标记数组nums1和nums2的起始位置。2、然后来处理一些边界问题,比如当某一个数组的起始位置大于等于其数组长度时,说明其所有数字均已经被淘汰了,相当于一个空数组了,那么实际上就变成了在另一个数组中找数字,直接就可以找出来了。3、如果K=1的话,那么我们只要比较nums1和nums2的起始位置i和j上的数字就可以了。4、难点就在于一般的情况怎么处理?因为我们需要在两个有序数组中

2021-06-21 09:42:20 932

原创 C++ vector实现最大堆,最小堆 以及堆排序

通过利用数组vector建堆堆具体是如何调整参考此处代码实现:找出子节点和父节点的关系 :父节点 =(子节点-1)/ 2然后得到子父节点判断是否满足最大堆最小堆的条件不满足则进行调换#include <iostream>#include <vector>using namespace std;vector<int> nums = {6, 9, 2, 4, 7, 0, 1, 8, 3, 5};vector<int> maxheap(vec

2021-06-16 15:21:23 968

原创 leetcode 1049 最后一块石头的重量II(01背包)

题目描述:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。思路:1、根据题意:如果两

2021-06-08 09:56:25 171

原创 剑指offer JZ48 不用加减乘除做加法

题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:不能用四则运算的话,只能用位运算,一位一位的计算比如5+7=1243211:0001 1:00010:0000 1:00010001 0000首先对于没有进位的位来说,只要异或就行但是对于有进位的来说,异或之后,还有进位,因此需要把进位存起来,之后再次相加,直到进位为0;那么进位怎么表示:进位用与表示,然后再左移上面步骤循环,直到进位等于0代码如下:

2021-06-05 18:42:30 109

原创 剑指offer JZ29 最小的K个数(最小堆,以及最大堆)

题目描述:给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组思路:最小堆;最小堆的堆顶是整个堆的最小数代码如下:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int>res

2021-05-29 17:09:46 127

原创 剑指offer JZ28 二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)思路:一、递归二叉搜索树的左右子树都是二叉搜索树,因此可以利用递归,判断每个子树是不是二叉搜索树利用一个辅助函数,实现递归首先判断这个数组的根节点是否满足二叉搜索树的要求然后可以拆成左右子树,再对左右子树进行同样的判断class Solution {public: bool help(vect

2021-05-28 09:26:47 106

原创 非递归快速幂 简单解释 C++

**题目描述:**实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。leetcode 50leetcode 剑指offer 16剑指offer jz12思路:快速幂原文链接代码如下:class Solution {public: double myPow(double x, int n) { double res=1; long m=abs(n);//防止n是负数,转换成正数溢出 while(m){

2021-05-25 21:49:21 176

原创 二叉树的各种分类

一、满二叉树除了最后一层的节点没有任何子节点外,每层上的所有节点都有两个节点的二叉树二、完全二叉树一颗二叉树的深度为h,除了第h层外,其他各层的节点都有两个子节点,且第h层的所有节点都集中在最左边(满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树)三、平衡二叉树左右两个子树的高度差绝对值不超过1,且左右两个子树都是平衡二叉树四、二叉搜索树左子树的所有节点的值均小于它的根节点的值右子树的所有节点的值均大于它的根节点的值它的左右子树也分别为二叉搜索树五、红黑树一种平衡的二叉搜索树

2021-05-08 21:37:41 6836 7

原创 经典动态规划 2个鸡蛋,100层楼问题

参考此处dp[n][m]表示n层楼m个鸡蛋时的最优解;在第i层,有j个鸡蛋时,本次测试鸡蛋卒,dp[i][j]=dp[i-1][j-1]+1(用剩下的j-1个鸡蛋测试i-1层),鸡蛋生还dp[i][j]=dp[n-i][j]+1(继续用j个鸡蛋测试剩下的n-i层);(取这两项的最大值,因为不知道到底是卒还是生还,所以要取最大值,以确保可以测试到)dp[i][j]=max(dp[i-1][j-1], dp[n-i][j])+1;代码如下:class Solution {public:

2021-04-22 15:28:07 434

原创 leetcode 回文字符串(总结)

一、LeetCode 647 回文子串题目描述:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。思路:循环遍历查找子串代码如下:class Solution {public: int countSubstrings(string s) { int n=s.size(); int res=0; vector<vector&lt

2021-04-19 21:58:08 999

原创 leetcode 841 钥匙和房间(递归与迭代)

题目描述:有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 tr

2021-04-15 20:35:00 163

原创 leetcode 双指针、滑动窗口

一、LeetCode 1004 最大连续1的个数III题目描述:给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。思路:双指针表示滑动窗口左边界不动,右边界往右边滑动,寻找代码如下:class Solution {public: int longestOnes(vector<int>& A, int K) { int l=0,res=0,cnt=

2021-04-01 09:58:02 151

原创 leetcode 403 青蛙过河(动态规划)

题目描述:一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。给你石子的位置列表 stones(用单元格序号 升序 表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一块石子上)。开始时, 青蛙默认已站在第一块石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格 1 跳至单元格 2 )。如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1 个单位

2021-03-31 12:30:21 553

原创 C++递归和迭代的区别,并举例说明

递归:函数自己重复调用自己迭代:利用变量的原值推算出变量的一个新值;A不停的调用B例子一:斐波那契数递归(recursion):#include #include using namespace std;int fab(int n){if (n == 0)return 0;if (n == 1)return 1;if (n > 1)return fab(n - 1) + fab(n - 2);}int main(){cout << fab(4) <

2021-03-31 12:29:17 602

原创 leetcode 深度优先搜索与广度优先搜索 以及并查集

一、通俗解释:出处深度优先可以这样想,一个人迷路,遇到很多分叉路口,他只有一个人,并且想走出去,所以只能一个个尝试,一条道路走到黑,发现到头了,然后再拐回去走刚才这条路的其他分叉路口,最后发现这条路的所有分叉路口走完了,选择另外一条路继续以上操作,直到所有的路都走过了。广度优先并不是这样,一个人迷路,但是他有技能(分身术)它遇到分叉路口,不是选一个走,而是分身多个人都试试,比如有A、B、C三个分叉路口,它A路走一步,紧接着B路也走一步,然后C路也赶紧走一步,步伐整齐统一,直到所有的路走过了。广度优先并不

2021-03-31 12:28:29 261

原创 LeetCode 456 132模式(单调栈)

题目描述:给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。注意:n 的值小于15000。思路:2表示第二大的数,放在最后面3表示最大的数,放在中间用一个递减的单调栈,表示3可能取得值,并让2仅次于3如果存在一个比2小的数,那么这个132模式存在代码如下:class Solut

2021-03-31 12:27:26 125

原创 leetcode 打家劫舍(动态规划)

一、leetcode 198 打家劫舍I题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。思路:两种情况下的动态规划代码如下:class Solution {public: int rob(vector<int

2021-03-15 21:51:33 133

原创 leetcode 矩阵问题合集

一、leetcode 200 岛屿数量题目描述:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。思路:dfs代码如下:class Solution {public: int numIslands(vector<vector<char>>& grid) { int

2021-03-11 22:11:36 454

原创 C++面试问题总结

一、static的作用不考虑类,static的作用主要有三条。1、第一个作用:隐藏当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。解释:假设我们要同时编译两个源文件,一个是a.cpp,另一个是main.cppa.cpp如下:#include<iostream>char a='A';void msg(){ cout<<"hello"<<endl;}则a.cpp中定义的全局变量a和函数msg能在main.cpp中使用

2021-03-11 20:53:17 254

原创 leetcode 下降路径最小和(动态规划)

一、LeetCode 931 下降路径最小和题目描述:给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1,

2021-03-09 09:55:48 172

原创 leetcode 分割回文串(dfs、动态规划)

一、LeetCode 131 分割回文串题目描述:给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。思路:dfs回溯算法代码如下:class Solution {public: vector<vector<string>> partition(string s) { vector<vector<string>>

2021-03-08 11:26:16 133

原创 单例模式(懒汉模式和饿汉模式)

一、单例模式1、概念:只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。关键点:①一个类只有一个实例(最基本的)②它必须自行创建这个实例③它必须自行向整个系统提供这个实例2、两种实现方式:①:懒汉模式(类加载时不初始化)②:饿汉模式(在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快)...

2021-03-07 16:36:04 248

原创 leetcode 等差数列的划分(子数组、子序列)动态规划

一、leetcode 413 等差数列的划分–子数组题目描述(例子):A = [1, 2, 3, 4]返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]。代码如下:class Solution {public: int numberOfArithmeticSlices(vector<int>& nums) { int n=nums.size(); vector&

2021-03-07 13:40:35 325

原创 内存管理与释放

一、内存分区在一个C/C++的程序中,用户使用的内存主要分为以下几个部分:栈区(stack区)、堆区、全局(静态)存储区、文字常量区、代码区(段)1、堆:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表;由malloc©或new(C++)来分配,free©或delete(C++)释放。若程序员不释放,程序结束后由系统释放。2、栈:由编译器自动分配和释放的,存放函数的参数值、局部变量的值等;操作方式类似数据结构中的栈。3、全局(静态)存储区:存放全局变量和静态变量。包括DATA

2021-03-06 18:47:04 476

原创 智能指针

一、为什么使用智能指针当我们使用new操作,分配了堆中的内存,但是忘了delete释放掉分配的内存,此时就会造成内存泄漏如果我们记得delete释放内存,也有可能存在内存泄露的问题,比如:void remodel(std::string & str){ std::string * ps = new std::string(str); ... if(weird_thing()) throw exception(); str = *ps; delete ps; return;}

2021-03-06 12:06:26 1505 1

原创 静态联编(函数重载)和动态联编(虚函数)

一、静态联编定义:由于函数重载,编译器必须查看函数参数以及函数名就能确定使用哪个函数;这种C/C++编译器可以在编译过程中完成的联编,被称为静态联编函数重载:在同一作用域中,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数二、动态联编定义:使用哪个函数是不能在编译时确定的,因为编译器不知道用户将要选择哪种类型的对象。所以,编译器必须生成能够在程序运行时选择正确的虚方法的代码,这就是动态联编。1、虚函数定义:定义非常简单,只需要在成员函数原型前加一个关键字virtual即可特

2021-03-05 17:10:44 1225

原创 类与类的继承

一、类的继承例子#include<iostream>using namespace std;class DataType {private: int year, month, day;public: DataType(int year_ = 1997, int month_=10, int day_ = 6) { year = year_; month = month_; day = day_; cout << "DataType的构造函数" <&

2021-03-05 11:37:50 427

原创 leetcode 825 适龄的朋友(剪枝)

题目描述:人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i] 表示第 i 个人的年龄。当满足以下任一条件时,A 不能给 B(A、B不为同一人)发送好友请求:age[B] <= 0.5 * age[A] + 7age[B] > age[A]age[B] > 100 && age[A] < 100否则,A 可以给 B 发送好友请求。注意如果 A 向 B 发出了请求,不等于 B 也一定会向 A 发出请求。而且,人们不会给自己发送好友请求。

2021-03-05 10:07:44 148 1

原创 leetcode 795 区间子数组个数(简单前缀和、子数组)

题目描述:给定一个元素都是正整数的数组A ,正整数 L 以及 R (L <= R)。求连续、非空且其中最大元素满足大于等于L 小于等于R的子数组个数。思路:最大元素满足大于等于L 小于等于R的子数组个数=最大元素满足 小于等于R-最大元素满足小于等于L-1代码如下:class Solution {public: int numSubarrayBoundedMax(vector<int>& A, int L, int R) { return he

2021-03-04 13:25:56 132 1

原创 LeetCode 354 俄罗斯套娃信封问题(一维动态规划)

题目描述:给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。思路:一维动态规划代码如下:class Solution {public: int maxEnvelopes(vector<vector<int>>& en

2021-03-04 09:21:40 134 1

空空如也

空空如也

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

TA关注的人

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