自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结

这一题相对来说还是十分简单的,就是上一个专题的最后一题求子集,只要递归函数体能写对,那怎么写这题都能过。2.全排列 Ⅱ(medium)题意很简单就是对全排列后的所有数组添加到ret后去掉所有重复的数组。全排列II跟全排列I一样,思路是一模一样,就只是再剪枝的策略上有所不同,只需要画清楚决策树,就可以完美的解决剪枝的策略。3.电话号码的字⺟组合(medium)题目意思挺简单的,就是给你一个字符串数字,然后针对每个数字的按键的字符串中的字符进行组合,求出所有情况的子集。

2024-10-12 11:25:02 539

原创 专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结

只要能分析出当前问题的相同子函数,就可以得出函数体里面的内容,通过所有相同的子函数的内容进行一步步操作就能完成当前函数的任务。2.求根节点到叶节点数字之和(medium)题意还是比较好理解的,就是对从根节点开始一直到叶子节点,计算每个节点当前值不断*10最后所有叶子节点的和像这种带有回溯类的问题,只需要考虑清楚带上的临时变量不会再中途被改变,并且再返回上一层稳定即可。

2024-10-05 22:21:52 1101

原创 专题九_递归_算法专题详细总结

C语言+数据结构(二叉树、快排、归并)函数自己调用自己的情况这里唯一需要注意的就是当x上的盘子移动到z上时,唯一的不同就是要将x.back()也就是最后一个元素移动到z上,并不是首元素进行移动。2.合并两个有序链表(easy)这题在上一个链表专题已经写过迭代的版本,就是利用多个指针,将较大值连接在较小值的后面,然后移动指针。循环(迭代)vs 递归这些都是解决重复子问题证明他们都是可以互相转换的,那么什么时候循环舒服?什么时候递归舒服?

2024-10-03 23:19:00 1023

原创 专题八_链表_算法专题详细总结

开始我想到挺简单的,创建新的链表,然后进行链接,就是采用头插法,本来挺成功的,就这里卡了我一个小时,各种调试都没过,最后还是去看题解了,才发现用头插法连接到原链表上居然失效了,只能再原链表上直接进行翻转。两个链表相加考虑进位,其实是挺简单的链表操作,可以直接在原链表上操作,一定要想清楚再写代码,这样负担很小,不要直接上手就写,但凡有一点思路不清楚就去画图!题意很简单,两两交换链表间的节点,比如【1,2】【3,4】【5,6】等等,没有重复的节点,那么就要考虑的是,交换之后,怎么有链接回原来的链表。

2024-09-25 22:47:01 1149

原创 专题七_分治_快排_归并_算法专题详细总结

这个代码真的很完美强烈建议默写一百遍!随机取值,数组分三块~3.快速选择算法(medium)这题也是本个章节的重点,topK问题这题是跟上题快排大差不差,唯一不同就是再最后的递归部分,考虑清除边界条件//分情况讨论:4.最⼩的 k 个数(medium)这一题仍然是TopK问题,那么这题正好跟上一题相反,找到最小的k个数想着一系列TopK问题都是利用数组分三块,然后在递归部分来进行缩小范围,直到满足结束条件,最后终止。分治 - 归并排序5.归并排序(medium)

2024-09-22 13:01:32 747

原创 C++——map和set的使用以及map系列

总结一下吧~该节只是对set/map简单的结束和运用,对于这两个数据结构来刷算法是完全够用了,对我的作用很大,希望对你也是!!!

2024-09-21 00:49:42 854

原创 专题六_模拟_算法详细总结

像这种模拟题,就要尽可能的想到简便的办法来进行优化,其实很简单。2.提莫攻击(easy)这题题意很简单,就是再中毒时间内,如果继续被攻击,那么就刷新中毒时间,从头开始,那么只需要计算数组每两个数之间的间隙大小是否大于中毒时间即可。对于这种题目有点复杂的模拟,就一定要耐心找到规律,就会变得很简单,重点就是如何把规律变成代码的形式。4.外观数列 (medium)这题相对来说真的比较简单了,只要理解题目意思,真的模拟起来so easy~

2024-09-20 00:01:58 902

原创 手撕二叉树搜索树——key/value 模型

/结构体K _key;:_key(key){}//Key//using 跟 typedef 用法一样public:private:3.⼆叉搜索树的插⼊插⼊的具体过程如下:1.树为空,则直接新增结点,赋值给root指针2.树不空,按⼆叉搜索树性质,插⼊值⽐当前结点⼤往右⾛,插⼊值⽐当前结点⼩往左⾛,找到空位置,插⼊新结点。3.如果⽀持插⼊相等的值,插⼊值跟当前结点相等的值可以往右⾛,也可以往左⾛,找到空位置,插⼊新结点。

2024-09-18 23:40:56 672

原创 专题五_前缀和_算法专题详细总结

可以看出,前缀和就是要求出 前缀和数组 ret数组第i位的值的时候,可以通过它的前一位和nums[i],来得出当前的值。2.【模板】⼆维前缀和(medium)int main()//1.读入数据i

2024-09-18 13:44:26 961

原创 专题四_位运算( >> , << , & , | , ^ )_算法详细总结

用bitMap来创建一个相当于int型的数组,i来存储每一位字符该移动的位数,那么就将bitMap>>i移动i位后,在跟1进行按位与,如果第一位都是1,那么就会得到1,说明之前就重复存在过,返回false只要没有返回false 说明都是第一次出现,那么就将他bitMap这一比特位进行改变为1 ,先将1

2024-09-17 21:07:11 1107

原创 C++——一篇文章解决 多态 所有问题(三大特性之一)

通过下图我们可以看到,满⾜多态条件后,底层不再是编译时通过调⽤对象确定函数的地址,⽽是运⾏时到指向的对象的虚表中确定对应的虚函数的地址,这样就实现了指针或引⽤指向基类就调⽤基类的虚函数,指向派⽣类就调⽤派⽣类对应的虚函数。纯虚函数,不能实例化出对象,那么他的派生类,也同样是纯虚函数,不能实例化出对象,那么这样就有种强制的感觉让派生类进行重写虚函数,就可以实例化对象。协变的实际意义并不⼤,所以我们了解⼀下即可。派⽣类的虚函数表中包含,基类的虚函数地址,派⽣类重写的虚函数地址,派⽣类⾃⼰的虚函数地址三个部分。

2024-09-12 15:54:47 798

原创 初始Linux 和 各种常见指令

eg:自己新建的文件键盘 printf / scanf cout/cin鼠标显示器本质就是文件操作,那么在调用时,都是要进行先打开文件操作,然后操作完后就关闭文件。那么为什么printf / scanf 不用我们打开文件呢?就是因为,printf / scanf 函数里面就是封装好了文件键盘,显示器的文件,他给我们进行打开,也进行了关闭。

2024-09-11 21:38:15 722

原创 专题三_二分查找算法_算法详细总结

二分查找经典题目。首先最重要的就是判断循环的结束条件,left>right,因为在这之前,left==right的时候,仍然要判断一次nums[left]是否等于target,所以循环条件就是while(left

2024-09-09 23:11:11 1008

原创 专题二_滑动窗口_算法专题详细总结

滑动窗口,要从暴力推导到优化还是比较好想的,滑动窗口,是保证两个指针left跟right依次往前运动,不后退,保证了效率的提升,不用产生无用的操作。这题就是1.先要保证进窗口,//进窗口,一定要在前面这个就是进窗口的条件,当nums[right]==0 _k++;2.那么现在考虑出窗口,while(_k>k) 在这个循环条件里面进行出窗口,其实仔细一些,如果在_k==k 时出窗口是不完美的,你还要保证nums[right+1]这个时候也是等于0 的。

2024-09-08 12:23:54 931

原创 专题一_双指针_算法专题详细总结

利用双指针,cur=0,dest=-1,只要nums[cur]==0 dest就走两格;否则 dest走一格;但是无论怎么样cur都走一格。直到dest到达结尾处n-1 停止,即 判断dest>=n-1 处 break;

2024-09-06 06:00:00 1030

原创 快排的深入学习

起泡排序又称冒泡排序。它是通过一系列的“交换”动作完成的。首先第一个关键字和第二个关键字比较,如果第一个大,则二者交换,否则不交换;然后第二个关键字和第三个关键字比较,如果第二个大,则二者交换,否则不交换······。一直按这种方式进行下去,最终最大的那个关键字被交换到了最后,一趟起泡排序完成。经过多趟这样的排序,最终使整个序列有序。在这个过程中,大的关键字像石头一样“沉底”,小的关键字像气泡一样逐渐向上“浮动”,冒泡排序的名字由此而来。1. 冒泡排序是一种非常容易理解的排序。

2024-09-05 08:00:00 1442

原创 彻底学懂BFS广度优先遍历(最全解)

广度优先遍历(Breadth-First Search,BFS)是一种图形搜索算法,从图的某一特定顶点出发,首先访问其所有邻接顶点,然后再依次访问这些邻接顶点的邻接顶点,如此一层一层地向外扩展,直到访问完所有顶点。在二叉树等数据结构中,BFS 通常按照从根节点开始,一层一层地横向遍历节点。

2024-09-04 07:00:00 1950 1

原创 一个题目学会 非顺序二分查找思想

再次取中间元素 8,7 小于 8,所以在 [6, 7, 8, 9, 10] 的前半部分继续查找,即 [6, 7],取中间元素 6,7 大于 6,所以确定目标元素为 7。可以发现的是,我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。非顺序二分查找是在不完全有序的数组中进行查找的方法。的,另一部分是无序的。

2024-09-02 18:25:04 1225

原创 彻底学会使用堆的构建+排序

return _hp;i < _size;_hp = tmp;//扩容//push的同时要进行向上调整建小堆else break;else break;//删除堆顶元素//交换最后一个元素跟堆顶元素//向下调整_size--;//通过向下调整建好的小堆i >= 0;i--)//sort 小堆排降序i > 0;

2024-08-30 07:00:00 1043

原创 一个题目教会你使用 priority_queue<int,vector<int>> q 优先级队列 和 unordered_map<int,vector<int>> hash 二维数组 hash表

对于unordered_map hash;有了更深层的理解,对于二维数组的引用不管是push_back() , 还是hash[ ].erase(hash[ ].begin())删除都有了更深的影响。对于优先级队列priority_queue 底层是大小堆的实现有更深的了解 , 非常建议自己动手来实现一下大小堆!!

2024-08-26 07:45:00 2085

原创 C++进阶——继承(搞定三大特性之一)

继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有 类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称⼦类。继承呈 现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复 ⽤,继承是类设计层次的复⽤。

2024-08-23 11:07:30 733

原创 C++——模板进阶

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性。

2024-08-22 18:38:43 636

原创 c++——list类

list 是一个双向循环链表。

2024-08-16 08:00:00 1474

原创 leetcode——43.字符串相乘

4)1、长度是n和长度是m的数字相乘,最多只有n + m位,为了方便计算,将num1和num2反向存储到A[]和B[]中,即位数低的在数组前面,且开一个大小是n + m的C[]存储计算后的答案。1、长度是n和长度是m的数字相乘,最多只有n + m位,为了方便计算,将num1和num2反向存储到A[]和B[]中,即位数低的在数组前面,且开一个大小是n + m的C[]存储计算后的答案。1.用暴力求出每一位数字跟num2的每一位相乘的和,当数字相加的时候,数据就爆了,存不下。4、最后将C[]数组反转输出。

2024-08-15 19:19:59 478

原创 C++——vector类

(constructor)构造函数声明接口说明vector()(重点)无参构造构造并初始化n个val(重点)拷贝构造使用迭代器进行初始化构造。

2024-08-14 11:42:29 1320

原创 C++——string 类

在构造时,将资源的计数给成1,每增加一个对象使用该资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源,如果计数为1,说明该对象时资源的最后一个使用者,将该资源释放;3)用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。4)auto不能作为函数的参数,可以做返回值,但是建议谨慎使用。

2024-08-13 08:00:00 1208

原创 leetcode——1035.不相交的线

4)取值方向,由dp[i-1][j-1] dp[i][j-1] dp[i-1][j] 三个方向来求dp[i][j]那么就是从左向右,从上向下。3)初始化问题:由于dp存在i-1 与 j-1 那么就多加一行和一列,为了不影响dp[1][1]取值,就把第一行和第一列初始化为0。1.若相等:if(nums1[i-1]==nums2[j-1]) dp[i][j]=dp[i-1][j-1]+1;2.若不相等:else dp[i][j]=max(dp[i][j-1],dp[i-1][j]);

2024-08-12 01:01:40 345

原创 C++——模板

class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;

2024-08-09 16:43:21 686

原创 C++——内存管理(一篇文章就够啦~)

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;//申请对象+初始化//一个int类型的空间,初始空间大小为10//new10个int类型的空间,并且值全部都为0free(p5);return 0;

2024-08-09 10:58:35 748

原创 C++——类和对象(全)

⽆论是否显⽰写初始化列表,每个构造函数都有初始化列表;⽆论是否在初始化列表显⽰初始化,每个成员变量都要⾛初始化列表初始化;对于const int _n;int& _ref;这类const 和 引用成员变量,只能在定义时就进行初始化,所以只能在初始化列表里面进行。所有成员都要走初始化列表1、在初始化列表初始化的成员(显示初始化)2、没有在初始化列表初始化的成员a.声明的地方有缺省值用缺省值b.没有缺省值x:内置类型,不确定,看编译器,大概率时随机值。

2024-08-09 01:30:32 1084

原创 操作系统——文件管理

1)数据项:分为基本数据项(用来描述一个对象的某种属性的一个值,是数据中最小逻辑单位)和组合数据项(由多个数据项组成)2)记录:是一组相关的数据项集合,描述一个对象在某方面的属性3)文件:分为有结构文件(若干个相似的记录组成)和无结构文件(被视为一个字符流)文件可以是数组、字符或二进制代码。

2024-07-22 19:35:29 1091

原创 操作系统——内存管理

1)为什么要进行内存管理?2)多级页表解决了什么问题?又会带来说明新问题?内存管理:操作系统对内存的划分和动态分配。因为操作系统不可能将所有用户进程和系统所需要的全部程序都放入主存,必须要合理有效的规划内存空间问题。内存管理的主要功能有:1.内存空间的分配与回收:由操作系统负责内存空间的分配和管理,并且回收结束进程所占有的空间。2.地址转换:存储管理必须提供地址变换功能,将逻辑地址转换成对应的物理地址。3.内存空间的扩充:利用虚拟存储技术从逻辑上扩充内存。

2024-07-21 20:23:02 674 1

原创 操作系统——进程与线程(死锁)

1)为什么会产生死锁?产生死锁有什么条件?2)有什么办法解决死锁?

2024-07-20 17:55:24 1026 1

原创 操作系统——进程与线程(同步与互斥)

利用flag解决互斥问题,利用turn解决“饥饿”问题,双方都谦让着对方进入临界区,先设置自己falg=true,然后设置对方的turn进行谦让,最后再检查对方的while(falg[i]&&turn) 保证只有一个程序能进入,但是这样有一个程序执行时可能就会进行等待,违背了“但是若按照下面1,2,5,6执行,双方都抢着要进入临界区,结果谁都进不去,最后违背“空闲让进”,时间过长又会导致“饥饿”现象,违背“有限等待”原则。V一下,增加一个空闲缓冲区,empty++,当产品数量为0时,P这里进入阻塞队列。

2024-07-19 22:34:46 818 1

原创 操作系统——进程与线程(CPU的调度)

作业调度从外存的后备队选择一批作业进入内存,为他们建立进程,这些进程被送入就绪队列,进程调度从一个就绪队列种选出一个进程,并将状态改为运行态,将CPU分给他。4.当I/O设备完成后,发出I/O中断,原先等待I/O的进程被阻塞态变为就绪态,此时就需要决定是让新的就绪进程投入运行,还是让中断发生时运行的进程继续执行。CPU的调度是对CPU进行分配,从就绪队列中按照一顶公平的算法选择一个进程并将CPU分配给它运行,来实现进程并发地执行。2).中级调度将暂时不能运行的程序挂起,自己调度处于作业调度和进程调度之间。

2024-07-19 01:16:39 830

原创 第十三届蓝桥杯省赛——积木画(规律题(模拟))

MOD,在加前和加后都要进行%MOD才能过全部用例。则dp[n]=dp[n-1]*2+dp[n-3];注意开 long long!

2024-04-13 00:32:17 140 1

原创 第十三届蓝桥杯省赛——统计子矩阵(前缀和,一维前缀和+滑动窗口)

i-1行跟i1行的不同,这里i1行的大小在变化,那么就可以满足在矩阵中间求出任意大小的矩阵的前缀和。同理,在[i1,j1]位置结尾的元素时的前缀和减去j-1列,i1行为结尾的前缀和,这里就要开始区分。可以理解为在[i1,j1]位置结尾的元素时的前缀和减去i-1行,j1为结尾的前缀和,这里就要开始区分。左上角为(1,1),右下角为(4,4),对应的前缀和为。左上角为(1,1),右下角为(2,2),对应的前缀和为。j-1列跟j1列的不同,这里j1列的大小在变化。假设对应坐标为(x,y)的数据前缀和用来表示。

2024-04-13 00:11:09 249 1

原创 第十三届蓝桥杯省赛——X 进制减法(贪心,模拟)

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。

2024-04-12 02:12:41 1081

原创 第十二届蓝桥杯省赛——砝码称重(搜索,枚举,dp)

进行每一层的遍历,取出每一层的每一个砝码,对其进行加减,dfs()的方式,用vis()来判断该砝码是否在上面的层数中使用过,用完一层的砝码,就将变为vis[i]=true;//3.加上i位置的砝码,放在另一边,可以称出j重量,dp[i-1][abs(j-arr[i])];//2.加上i位置的砝码放在一边,可以称出j重量,dp[i-1][j+arr[i]];//状态表示:dp[i][j]表示在以i个砝码位置结尾时,能否称出j重量。//1.没有加上i位置的砝码,就可以称出j重量,dp[i-1][j];

2024-04-11 16:57:04 225 1

原创 第十二届蓝桥杯省赛——货物摆放(模拟)

这题真的非常简单,就是找出n的所有因子,然后进行三个数暴力相乘得到结果就ret++如果省赛碰到这题,真的就是白白送分,可是我第一次写还是没能写出来。2.枚举解法:由于只有三个数,那么就枚举以一个数,相乘得到n。最简单的暴力解法,由于n过大,严重超时。小优化:枚举数,只枚举他的因子。

2024-04-11 10:02:03 168 1

空空如也

空空如也

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

TA关注的人

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