![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 82
算法学习以及刷题记录
Outlier_9
听从己心,无问西东
展开
-
数据结构——二叉树 C语言代码实现(可直接运行)
原理见另一篇文章。原创 2024-03-20 23:27:31 · 490 阅读 · 0 评论 -
数据结构 二叉树 力扣例题AC——代码以及思路记录
遍历一遍所有节点,但是在遍历的过程中,进行当前节点和他的左子树与右子树结点的值的比较,前提是有左子树结点和右子树结点,如果说,有左子树也有右子树结点,就需要继续向下检查,如果值不同就返回false,遍历到最底下为空返回true开始返回,返回的时候用逻辑与,这样只要有一个false最后就不是单值,反之是单值。否则,返回 false。,因为他的左子树412与subroot相同,因此需要继续向下遍历并检测是否相同,因此在判断root的值是否相同后再以判断是否相同为条件,不相同继续向下遍历,直到检测到NULL。原创 2024-03-18 22:40:19 · 908 阅读 · 0 评论 -
数据结构——二叉树 原理
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。由于现在对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式(在文章底部)(1)满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。原创 2024-03-08 12:41:24 · 1466 阅读 · 0 评论 -
数据结构 栈和队列 力扣例题AC——代码以及思路记录
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。原创 2024-03-02 08:00:00 · 836 阅读 · 0 评论 -
数据结构链表力扣例题AC(4)——代码以及思路记录
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。最简单的方法就是比较两个链表中的值,将小的尾插到新链表中。创建一个新链表,一个指针head指向头结点,一个指针tail进行尾插操作,然后开始进行比较,结束条件是其中一方的值为空,如果tail还是NULL,说明新链表还没有值,就将head和tail都指向小的那一个,如果tail不为空了,那么继续尾插,让他的next去存这个小的的地址,然后让tail前移。小的值所在的list也前移。原创 2024-02-23 08:00:00 · 1152 阅读 · 0 评论 -
数据结构链表力扣例题AC(3)——代码以及思路记录
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。原创 2024-02-21 08:00:00 · 890 阅读 · 0 评论 -
数据结构链表力扣例题AC(2)——代码以及思路记录
给你单链表的头节点head,请你反转链表,并返回反转后的链表。原创 2024-02-16 23:58:43 · 1176 阅读 · 0 评论 -
数据结构链表力扣例题AC(1)——代码以及思路记录(含链表本机调试tips)
是空的话,说明正在移除的元素是头指针,因为这是进入当前循环的条件,删除头指针的话,也就表示删除了链表的地址,会发生内存泄漏,因此需要将head调整到指向下一个元素,再进行释放;快慢指针,fast指针和slow指针都指向head,fast指针每次走两步,slow指针每次走一步,当将整个链表都遍历了一遍以后,fast指向了尾部(总节点数为奇数时指向尾部节点,总节点数为偶数时指向尾部节点的后面也就是空指针),而此时slow指针刚好指向的是中间节点(总节点数为偶数时则为第二个中间节点),此时返回slow指针即可。原创 2024-02-16 00:24:15 · 604 阅读 · 0 评论 -
数据结构顺序表力扣例题AC——代码以及思路记录
有几种思路可以写,①新建一个数组,依次遍历nums1和nums2,并进行比较,加入到新数组中;第一种方法时间复杂度O(n),第二种O(n^2),所以优先考虑①,但是题目中要求最后提交的是nums1数组,所以不能新建数组,观察nums1,他的m个元素以后就都是0,则可以把m个元素以后的由0组成的那部分视为新数组,然后倒着进行比较,也就是先比较大的,然后哪个大哪个覆盖末尾的0,指针前移,因此需要三个指针,分别是i1,i2,进行比较,j用来记录当前nums1添加进去的元素个数和位置。nums2 的长度为 n。原创 2024-01-25 02:27:39 · 836 阅读 · 0 评论 -
算法基础课
快速排序 归并排序 二分查找原创 2023-03-18 23:44:33 · 295 阅读 · 0 评论 -
【第五天】算法图解--哈希表(散列表)Hash函数
学习散列表——最有用的基本数据结构之一学习散列表的内部机制:实现、冲突、散列函数编程语言提供了散列表实现散列表是一种功能强大的数据结构,其操作速度快,还能让你以不同的方式建立数据模型,你可能很快会发现自己经常在使用它①你可以结合散列函数和数组来创建散列表②冲突很糟糕,应使用可以最大限度减少冲突的散列函数③散列表的查找、插入和删除速度都非常快④散列表适合用于模拟映射关系⑤一旦填装因子超过0.7,就该调整散列表长度⑥散列表可用于缓存数据(例如,在web服务器上)⑦散列表非常适合用于防止重复.原创 2022-07-23 17:46:58 · 742 阅读 · 35 评论 -
【第四天】算法图解 之 快速排序
①D&C将问题逐步分解,使用D&C处理列表时,基线条件很可能是空数组或只包含一个元素的数组②实现快速排序时,请随机的用作基准值的元素。快速排序的平均运行时间为O(nlogn)③大O表示法中的常量有时候事关重大,这就是快速排序比合并排序快的原因所在④比较简单查找和二分查找时,常量几乎无关紧要,因为列表很长时,O(logn)的速度比O(n)快得多..................原创 2022-07-04 17:50:45 · 196 阅读 · 7 评论 -
【第三天】算法图解 之 递归
持续更新算法图解笔记内容!·算法图解阅读笔记之递归本章包含大量伪代码,伪代码是对手头问题的简要描述,看着像代码,但更接近自然语言。介于自然语言和编程语言之间,是一种描述算法的语言。①递归指的是调用自己的函数②每个递归函数都有两个条件:基线条件和递归条件③栈有两种操作:压入和弹出④所有函数调用都进入调用栈⑤调用栈可能很大,这将占用大量内存...原创 2022-06-29 12:00:00 · 215 阅读 · 1 评论 -
【第二天】算法图解 之 选择排序
内存的工作原理计算机内存的工作原理,就像是很多抽屉的集合体,每个抽屉都有地址需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址需要存储多次数据时,有两种基本方式——数组和链表数组和链表使用数组意味着所有待办事项在内存中都是相连的①计算机内存犹如一大堆抽屉②需要存储多个元素时,可使用数组和链表③数组的元素都在一起④数组的读取速度很快⑤链表的元素是分开的,其中每个元素都存储下一个元素的地址⑥链表的插入和删除速度很快⑦在同一个数组中,所有元素的类型都必须相同(都为int等).原创 2022-06-28 12:00:00 · 141 阅读 · 2 评论 -
【第一天】算法图解 之 二分查找
算法图解阅读笔记之二分查找二分查找是一种算法,其输入是一个有序的元素列表对于包含n个元素的列表,用二分查找最多需要logn步,而简单查找最多需要n步①算法的速度指的并非时间,而是操作数的增速②谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加③算法的运行时间用大O表示法表示④O(logn)比O(n)快,当需要搜索到元素越多时,前者比后者快的越多⑤大O表示法说的是最糟的情形,简单查找的运行时间不可能超过O(n),除最糟情况下的运行时间外,还应考虑平均情况的运行时间....原创 2022-06-27 11:29:54 · 300 阅读 · 2 评论