- 博客(36)
- 收藏
- 关注
原创 代码随想录-DAY⑩-二叉树——leetcode 144 | 94 | 145
递归,略迭代,用一个栈存放暂时没有写入到结果集的节点时间复杂度:O(n)空间复杂度:O(n)
2024-07-19 00:21:20
289
原创 代码随想录-DAY⑨-栈与队列——leetcode 20 | 150
遇到左括号压栈,遇到右括号弹栈,并对比是否配对。注意需要弹栈时栈空的话说明也不匹配。时间复杂度:O(n)空间复杂度:O(n)
2024-07-16 00:19:49
262
原创 代码随想录-DAY⑧-栈与队列——leetcode 232 | 225
将一个栈当作输入栈,另一个栈当作输出栈,每次 pop 或 peek 时,若输出栈为空,则将输入栈的全部数据依次弹出并压入输出栈。时间复杂度:O(1)空间复杂度:O(n)
2024-07-13 00:39:37
260
原创 代码随想录-DAY⑦-字符串——leetcode 344 | 541 | 151
没啥好说的,双指针头尾交换,相遇结束。时间复杂度:O(n)空间复杂度:O(1)
2024-07-10 23:54:17
364
原创 代码随想录-DAY⑥-哈希表——leetcode 383 | 454
首先统计 magazine 中每个英文字母 a 的次数 cnt[a],再遍历统计 ransomNote 中每个英文字母的次数,如果发现 ransomNote 中存在某个英文字母 c 的统计次数大于 magazine 中该字母统计次数 cnt[c],则此时我们直接返回 false。时间复杂度:O(n+m)空间复杂度:O(1)
2024-07-10 00:16:40
296
原创 代码随想录-DAY⑤-哈希表——leetcode 242 | 349 | 202
先遍历字符串1,记录每个字符的个数,然后遍历字符串2,挨个减去字符个数,出现小于零的个数说明字符总数不重合。时间复杂度:O(n)空间复杂度:O(1)
2024-07-08 23:26:39
692
1
原创 代码随想录-DAY④-链表——leetcode 24 | 19 | 142
此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+1)b+nc。有了 a=c+(n−1)(b+c) 的等量关系,我们会发现:从相遇点到入环点的距离加上 n−1 圈的环长,恰好等于从链表头部到入环点的距离。因此,我们有 a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c)根据题意,任意时刻,fast 指针走过的距离都为 slow 指针的 2 倍。否则,通过更新节点的指针关系交换 pre 后面的两个节点,最后,返回新的链表的头节点。
2024-07-08 00:13:34
397
原创 代码随想录-DAY④-相交链表经典三解——leetcode 160
即最终两个指针一定走了一样的步数(n+m),如果发现已存在在哈希集合中的,说明相交,让指向较长链表的指针向后挪动长度差的步数,将链表 A 中的每个节点都存入哈希集合,走到头(一定同时)都不相等说明不相交。遍历链表 B 并判断每一个节点,两个指向链表的指针同时向后移动,遍历并计算两个链表的长度差,如果遍历结束,说明不相交。然后两个指针同时向后移动,时间复杂度:O(m+n)时间复杂度:O(m+n)都继而指向另一个链表头,时间复杂度:O(m+n)空间复杂度:O(m)空间复杂度:O(1)空间复杂度:O(1)
2024-07-06 23:55:30
344
原创 代码随想录-DAY③-链表——leetcode 203 | 707 | 206
设置一个虚拟头结点,这样所有节点就都可以按照统一的方式进行移除。如果下一个节点的值等于 val,让节点 next 指针直接指向下下一个节点。不要忘记清理节点内存。时间复杂度: O(n)空间复杂度: O(1)
2024-07-05 23:57:39
335
原创 代码随想录-DAY②-数组——leetcode 977 | 209
使用两个指针分别指向位置 0 和 n−1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况。时间复杂度:O(n)空间复杂度:O(1)
2024-07-04 22:46:12
312
原创 代码随想录-DAY①-数组——leetcode 704 | 27
定义查找的范围 [left,right],初始查找范围是整个数组。每次取查找范围的中点 mid,比较 nums[mid] 和 target 的大小,如果相等则 mid 即为要寻找的下标,如果不相等则根据 nums[mid] 和 target 的大小关系将查找范围缩小一半。时间复杂度: O(logn)
2024-07-02 22:10:12
347
原创 Linux修复磁盘坏道,重新挂载硬盘
/dev/sdb is write-protected, mounting read-onlySuperblock invalid, trying backup blocks...Bad magic number in super-block while trying to open /dev/sdb
2023-12-07 14:29:18
1248
原创 死锁是什么?在postgresql中是如何预防死锁的?
什么是死锁?进程的加锁请求会被锁冲突阻塞,从而进入睡眠等待状态。而如果出现了多个进程持有、且等待其他进程释放资源的恶性环,即形成死锁。可以简单地将死锁理解为:存在资源争夺的恶性环。举个栗子:假设有n个人,围着圆桌坐了一圈。每个人左手都拿着一个馒头,且都用右手去抢自己右手边人手里的馒头。结果谁都把馒头吃不到嘴里!...
2020-06-24 15:18:34
682
原创 centos7Linux中的lvm、pv、vg、lv,以及Linux扩容,创建新分区
概念本着言简意赅的目的。以下概念会在扩容时用到,需熟知,不然会不理解具体操作在干什么。lvm:逻辑卷管理器(Logical Volume Manager)它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称代替物理磁盘名(如dev/sda、dev/sdb)来标识存储卷。pv:物理...
2020-04-12 22:10:24
6375
原创 排序算法归纳(c语言) ⑦快速排序
快速排序Quick Sort,被誉为20世纪十大算法之一,真正的排序大佬登场!快速排序可看作冒泡排序的升级,它们同属于交换排序类。只不过快排增大了记录的比较和移动距离,从而减少了比较和交换次数。快速排序的基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序的目的。在最优情况下快排的时间复杂度为O...
2019-06-22 16:58:44
512
原创 排序算法归纳(c语言) ⑥归并排序
归并排序归并,顾名思义是归一,合并的意思。具体的做法大体是:将两个有序子段归并为一个长段,重复这一过程,最终就能得到一个有序序列了。所以,纵观整个对并过程,就像是一颗完全二叉树。由二叉树的深度可以得出,整个归并排序的执行次数是以2为底n的对数。自然,这是一个对数级的操作。扫描整个整个序列需要耗时O(n),所以,对并排序是一个时间复杂度为O(nlogn)。归并中因为开取了辅助空间,空间复杂...
2019-05-31 21:21:27
268
原创 排序算法归纳(c语言) ⑤堆排序
堆排序HeapSort,这是相当常用的一种排序算法。原因是它的时间复杂度相当稳定,且相当高效。无论是最好情况还是最坏情况,时间复杂度都能较稳定地保持在O(nlogn)。...
2019-04-26 20:07:11
245
原创 排序算法归纳(c语言) ③插入排序
插入排序插入排序的关键在于:将后来的无序元素,插入到前面的有序之中。可是我们拿到手的往往是一组纯无序的元素啊,哪有什么“前面的有序元素”呢?当然有,要知道,任意单一元素是自然有序的。也就是说我们可以把第一个元素看成前端的有序列,将后续元素插入到这个有序列之中。待排序数据依然存放于顺序表中。数据存放没有从0开始,而是选择从1开始。代码参考于《大话数据结构》。...
2019-04-22 10:39:03
240
原创 排序算法归纳(c语言) ②选择排序
选择排序系列之第二篇,选择排序。选择排序相对于冒泡排序是较少做交换的。因为它在进行一次外层循环后,只挑选最优的一个元素进行交换。这也就省去了一些交换的时间复杂度。所以,从这个角度讲,选择排序的效率因该会高于冒泡排序。待排序数据依然存放于顺序表中。数据存放没有从0开始,而是选择从1开始。代码参考于《大话数据结构》。初始设定#include<stdio.h>#define ...
2019-04-17 12:15:23
274
原创 排序算法归纳(c语言)①冒泡排序
冒泡排序这是最早学到的一个排序算法,它的原理比较简单。就像它的名字一样,很形象,让大数(或小数)“冒出头”。本代码中,待排序的数据放在一个顺序表中。数据存放没有从0开始,而是选择从1开始,data[0]则可做他用。这里一共列出三个,由简单到复杂的冒泡排序代码。代码参考于《大话数据结构》。初始设定#include<stdio.h>typedef int ElemType;...
2019-04-16 23:14:47
363
原创 图的相关概念~DS笔记⑦
图前面学到的数据结构都是一对一,一对多的。一对一比如单链表,一对多比如树。这次考虑一种更复杂,多对多的,却也跟我们息息相关的数据结构,图。图(Graph):是由顶点的有穷非空集合和顶点之间的边的集合组成。通常表示为:G(V,E),其中,G表示一个图,V是顶点集合,E是边集合。无向边:若顶点v1到顶点v2之间没有方向,则称这条边为无向边。用无序偶对(v1,v2)来表示。无向图:若图中任意...
2019-04-11 20:58:14
215
原创 二叉树相关概念及c语言实现~DS笔记⑥
二叉树(Binary Tree):是n(n&gt;=0)个结点的有限集合,该集合或者为空集,或者是由一个根节点和两颗互不相交的、分别为根节点的子二叉树组成。二叉树的特点:每个结点最多有两个子树,且左右有序,不可颠倒。斜树:所有节点都只有左子树,或只有右子树的二叉树,分别称为左斜树和右斜树,统称为斜树。满二叉树:在一棵二叉树中,所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。完全...
2019-03-26 21:49:36
325
原创 树的相关概念~DS笔记⑥
树树(Tree):n(n&amp;gt;=0)个结点的有限集。n为0时称为空树。在任意一棵非空树中:①:有且仅有一个特定的称为根(Root)的结点;②:当n&amp;gt;1时,其余结点可分为m(m&amp;gt;0)个互不相交的有限集T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。这里用到了递归的方法,也就是用树的概念去定义树。这对于树是很适用的。在后面对于树的相关功能实现时...
2019-03-09 21:15:38
238
原创 为什么要用循环队列,及基础操作代码(c语言)~DS笔记④
一般队列的弊端在于,如果不进行前移操作,那么队列队头指针终会到头。那如果我们的队列没有队尾呢?没错,循环队列就是一个‘‘环’’。。。
2019-01-29 16:01:58
4441
3
原创 动态顺序表~DS笔记③
先附上结构体:typedef int ElemType; /*ElemType类型根据情况而定,这里为int*/typedef struct{ ElemType* data; /*线性表数据起始地址*/ int length; /*线性表当前长度*/ int capacity; /*线性表容量*/}SqList;函数声明:void ListAddCapaci...
2019-01-22 16:19:28
257
原创 算法的优劣~DS笔记②
算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法的五个基本特性:输入、输出、有穷性、确定性、可行性。
2019-01-22 14:27:07
438
原创 数据结构基本概念~DS笔记①
尼采:人们无法理解他没有经历过的事。既然要认真学了,就还是在手里过一遍吧,这样印象比较深刻,也算是一种记录(笔记内容摘自《大话数据结构》)。
2019-01-16 16:36:36
2018
原创 c语言实现的单链表及一些基本操作
又是一篇学习记录。单链表算是很经典的一种数据结构了,记得数据结构课本开篇就讲的它。可能是因为比较简单吧。结构体代码如下:typedef struct _NODE{ int value; struct _NODE* next;}NODE, *PNODE;
2018-12-11 20:16:56
486
原创 c 语言数组基本操作(查找,修改,删除,插入)
写在前面:自己写了一边,不够精简,又借鉴了别人的例子,最后得出这个版本。恐怕既不是最简单的,也不是最精妙的,但是我目前能实现的比较清晰简洁的一版。还是先把‘‘见怪不怪’’给大牛写在前面。。。好了开始吧~第一个查找:这个没什么好说的就按值查找并返回下标就看吧~int ArrayFindByValue(int* p, int len, int value, int begin){...
2018-11-30 18:18:10
7181
1
原创 puzzle:c语言拼图小游戏
#include&amp;amp;amp;amp;amp;amp;lt;graphics.h&amp;amp;amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;amp;amp;lt;conio.h&amp;amp;amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp
2018-11-23 13:07:53
1065
原创 C语言EasyX_2018中的putimage(x, y, w, h, img, x1, y1)函数
putimage(x, y, w, h, img, x1, y1);函数一共有六个参数。以下解释来自EasyX_2018的帮助文件:这个函数的几个重载用于在当前设备上绘制指定图像。// 绘制图像void putimage( int dstX, // 绘制位置的 x 坐标 int dstY, // 绘制位置的 y 坐标 ...
2018-11-23 13:03:53
9502
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人