- 博客(36)
- 收藏
- 关注
原创 [LCP 51. 烹饪料理] 子集型回溯
子集型回溯有两种解法输入视角通过判断集合中的每一个元素 k,认为元素 k 被选入子集或不被选入子集,从而得到答案。其 dfs 形状是一个高度为 n 的二叉树。答案视角每次判断在集合中选择哪一个元素答案视角答案视角答案视角
2024-03-20 21:55:15
323
原创 [210. 课程表 II] 拓扑排序模板(DFS+BFS)
本题是经典拓扑排序模板,通过DFS和BFS两种方式进行实现。DFSBFS代码中同时有DFS和BFS两种实现
2024-03-08 00:22:39
378
原创 [124. 二叉树中的最大路径和] dfs数据操作和传递
在实际题目中,我们可能遇到需要多步不同操作,操作之间有复杂的依赖关系。这时就需要我们按照以上分类,理清每个操作可能的位置,将其中冲突的拆解到不同的dfs中,不冲突的合并在一个dfs中。从而正确的实现。
2024-02-27 19:53:40
1001
原创 [986. 区间列表的交集] 做什么和如何做
关键的点在于移动与判断相交的分离,如果在题解的某一处将移动与判断相交混杂(例如2处做法),那么题解应当会十分复杂。因此针对当前思路不可覆盖的用例,需要多进行模拟,清晰的描述用例的独特之处,将问题的难点一一说明。这一点在算法题目以至于实际的做事中更重要,与应试不同,解决问题时情况往往复杂(纷乱繁杂的情景)又简单(描述模糊的目的)。知道做什么和如何做同等重要,而前一点是大部分人缺乏训练的。将难点写明,问题便解决了一半。之后再结合题目性质考虑。想清楚比盲目补丁更有效。
2024-02-20 18:38:17
316
原创 [239. 滑动窗口最大值] 优先队列和单调队列
本题使用优先队列和单调队列两种方式,优化对于滑动窗口取最大值的时间复杂度。这对于一些动态规划的题目优化是有帮助的,因为动态规划常常需要对 dp 数组进行顺序遍历,根据前面的某区间内的值计算当前值,这和本体的情景十分类似。例如 1696. 跳跃游戏 VI对于一个区间,要动态存取最大值那么最直观的方法就是使用优先队列(大根堆),只需要将每一步划过的值存入优先队列中,即可自动排序出最大值,唯一需要考虑的就是使用的时候判断当前最大值是否在当前目标区间。优先队列的实现方式是堆,因此存入每个值时间复杂度都是 O(n)
2024-02-05 20:11:50
324
原创 [136. 只出现一次的数字 && 268. 丢失的数字] 异或的使用与二进制位运算
时间复杂度:空间复杂度:136. 只出现一次的数字268. 丢失的数字
2024-01-30 18:20:38
359
原创 [560. 和为 K 的子数组 && 53. 最大子数组和] 前缀和问题
Problem: 560. 和为 K 的子数组Problem: 53. 最大子数组和文章目录思路解题方法Code思路对于一个序列求解问题,我们可以先从两个维度思考:要不要排序,是否求解连续子序列。这两道题都是求连续子序列问题。对于这一类拥有连续性质问题,滑动窗口、前缀和等方法往往可以进行时间上的优化。解题方法前缀和则可以将最内层遍历转换为简单的做差,这样做的好处不仅在于可以降低 n 的时间复杂度,还在于可以列出子序列和的计算公式,如此可以通过数学的方式进行三个值的相互求解。
2024-01-27 14:44:10
340
原创 [283. 移动零] 二分类问题
Problem: 283. 移动零文章目录本题思路题目性质Code本题思路将所有的0移动到尾部,直接的想法就是遇到一个零就把0移动到数组尾部,再将数组长度减一,这个想法很显而易见。但是我们可以观察到,其实所有移动到尾部的0是有顺序的,他们是按照原数组中的逆序排列,如下arr_init = [1, 2, 0(1), 3, 0(2), 4]arr_sorted = [1, 2, 4, 3, 0(2), 0(1)]这个性质是可以被利用的,即 被移动的元素可以保持有序。例如,本题目的要求,剩余数
2024-01-17 10:51:07
366
原创 iostream库输入输出的效率问题
的与对比的和在速度上慢一个量级,产生这种情况的原因是实现上就效率低下吗?答案是否定的,iostream的效率低主要归结于
2023-11-30 19:31:49
409
原创 快速排序模板
最后将i+1和pivot交换,i+1也有两种情况,即i+1指向pivot和小于pivot,不论是哪种情况都可以交换,并且满足pivot将数组按照大小分布在左右两边的要求。i指针的意义是其指向的值一定是小于等于pivot的,因而初始化成为-1表示现在没有一定小于等于pivot的值。partation通过两个指针i,j操作这段无序数列,选择将pivot的值设置为最后一个元素。指针j则从0开始遍历,此事会遇到两种情况。
2023-07-19 20:12:09
81
原创 docker 命令总结
Docker容器是Docker镜像的运行实例,可以将其看作是一个轻量级的虚拟机,其中包含了应用程序的运行环境、配置信息、网络设置等。容器可以启动、停止、暂停、删除等操作,并且可以通过Docker镜像创建多个容器。Docker镜像是一个静态的文件,包含了一个完整的应用程序或者一组服务所需的所有代码、库文件、配置文件等。镜像和容器的主要区别在于:镜像是静态的文件,容器是镜像的运行实例;镜像是不可修改的,容器可以启动、停止、暂停、删除等操作;同一个镜像可以创建多个容器,每个容器都是相互隔离的。
2023-06-25 14:22:35
99
原创 To Fill or Not to Fill(贪心算法)
有了高速公路,开车从杭州到任何其他城市都很容易。但由于汽车的油箱容量有限,我们必须不时地在路上找到加油站。
2023-03-28 01:34:53
209
原创 Python的内存管理
1.不可变类型VS可变类型一般的基本数据类型都是不可变类型,一般的组合数据类型或者自定义数据类型都是可变数据类型python中的一切都是对象,可以通过id()函数查询对象在内存中的地址数据,可变类型是在定义过数据类型之后,修改变量的数据,内存地址不会发生变化,不可变数据类型是在定义了数据之后,修改变量的数据,变量不会修改原来内存地址的数据而是会指向新地址,原有的数据保留,这样更加方便程序中基本数据的利用率。nums = [12, 13, 15, 18, 20, "hello", ["world",
2022-03-01 22:59:55
524
1
原创 机试指南——扩展排序(计数,归并,快排三个模板以及一些思想)
目录线性排序——计数排序逆序数对——归并排序线性排序——计数排序to be continue…逆序数对——归并排序首先了解一下什么叫做逆序数对,抄一段百度在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的实际先后次序与标准次序不同时,就说有1个逆序
2022-02-13 22:51:57
255
原创 今天写个贝叶斯公式
意识流解释对于贝叶斯我现在最直观的感受就是贝叶斯其实是一个剪枝的过程。我们现在可以把对于每一个事件的判断都想象成一颗决策树,而贝叶斯公式,或者说它的理念就是在已知已发生的事件上面保留分支,而与已知事件相违背的事件则从决策树分支上面消失,从而达到事件概率的重新分布。比如一个例子昨天晚上天气预报说今天下雨可能性为50%,这就成为了我们判断事件的一个决策分支,我们今天的天气情况也随着这一概率而走上了两种不同的决策路径。然而我们又听说阴天下雨的概率会非常高(而如果是晴天那么下雨的概率会很低),到现在为止我们
2021-03-26 19:48:11
137
原创 宏定义中的可变参数 __VA_ARGS__ 用法 与 #和##的用法
首先了解一下可变参数#include <stdio.h> #define DEBUG(fmt, ...) printf(fmt, __VA_ARGS__)int main(){ DEBUG("you know i am handsome%d,%f,%d", 1000, 1.1, 10); return 0;}输出:you know i am handsome1000,1.100000,10这里的__VA_ARGS__其实就是指代…三个省略号的内容了,这
2021-03-17 17:28:53
1398
2
原创 git的命令总结
git的init和clone两个初始化的时候会用的命令,一般在刚开始项目的时候来进行使用。这里需要说明的是:git init命令是用于初始化git的仓库,也就是隐藏的那个.git文件,这个使用的情况是什么呢,就是我们要把本地的仓库推到远端,就需要在本地先创建仓库,然后用命令remote add进行远端仓库的连接,这时候我们本地其实有两个分支,分别是master和origin/master(一般在下面命令中都用origin)git remote add 主机名称(origin) 域名git.
2021-02-23 00:28:12
362
1
原创 关于c中代码加 ‘\‘ 进行换行的说明
我们在c与c++中经常会遇到一种情况就是加 \ 进行换行来保持代码整体结构一致的使用情况,那么具体来说换行的规则是什么这里进行一下记录#include <iostream>#include <string>using namespace std;#define MYDEF you \are\ the\ apple \ of my eye\s\ !// 以上分别为// 1 末尾加空格开头不加// 2 末尾不加空格开头两个制表符// 3
2021-02-19 00:07:01
6432
原创 namespace的说明与指示
namespcae说明一次只引入命名空间的一个成员(using std::cout)别的同名实体将被隐藏,可不用头部直接使用coutnamespace指示一次引入整个命名空间(using namespace std)即使是在函数内部使用也依旧好像在全局变量的位置一样,我理解的是这种描述的“效力”没有那么强(下面的例子可以说明)示例#include <iostream>#include <string>using std::cout;using std::en
2021-02-02 20:20:10
217
原创 c++的函数reserve()和unique()和sort()
函数reserve// vector::reserve#include <iostream>#include <vector>int main (){ std::vector<int>::size_type sz; std::vector<int> foo; sz = foo.capacity(); std::cout << "making foo grow:\n"; for (int i=0; i<100;
2021-01-15 20:55:23
3008
原创 关于cin与输入函数
本文主要是总结一下自己在c++学习中的一些读取函数的特点以及他们的细节,加入一些自己的理解,以方便之后查阅关于cin的直接输入符号>>他是cin对象的一个运算符重载,返回值依然是一个istream对象所以可以用连写的方式输入。他在输入的时候遇到空格,换行符时结束。在使用的时候他会先洗碗后吃饭,吃完饭后不洗碗:在使用之初他会先在缓冲区遍历,如果有存在内容那么他会直接读取内容,然后结束。但是如果存在空格或者换行符他会把这两个东西全部从缓冲区扔掉(洗碗),然后继续遍历,直到有内容读完结
2020-06-18 01:41:36
308
原创 高斯消元法SSE实现
#include <iostream>#include<pmmintrin.h>#include<time.h>#include<windows.h>#include<math.h>using namespace std;int N = 0;float** normal_gauss(float **matrix){ ...
2020-04-13 23:58:18
647
原创 并行编程实现矩阵乘法优化
实现四种矩阵乘法程序,并对比运行效率。1) 串行算法2) Catch优化3) SSE版本4) 分片策略#include<pmmintrin.h>#include<cstdlib>#include<algorithm>#include<windows.h>#include<iostream>#include<cti...
2020-04-13 16:40:50
1270
2
原创 C语言中将字符串拆分再进行拼接
我们有时候需要对于字符串进行操作,这在C语言中不是一件很轻松的事情,因此记录下这次的操作方式以便之后查阅#pragma warning(disable:4996)#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void) { /*for (i = 0; i < ...
2019-11-13 17:54:22
1338
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人