随笔分类 -  经典结构和算法

常用算法
摘要:深搜和广搜 1.概念 深度优先搜索(Depth First Search, DFS):“不撞南墙不回头” 广度优先搜索(Breath First Search, BFS):“一石激起千层浪” 2.DFS 2.1 特点 深度优先搜索的主要思路是从一个未访问过的节点开始,沿着一条路一直走,直到走到头后没 阅读全文 »
posted @ 2022-04-07 11:47 Curryxin 阅读(1215) 评论(0) 推荐(0) 编辑
摘要:死锁 1.概念 一个很通俗易懂的例子:假设有红蓝两把钥匙开红蓝两个门,两个人分别执行六条指令,最后要能够都把两扇门打开。 注意红蓝钥匙都各只有一把,也就是说两个人共享这对钥匙。 比如下面这幅图的解法: 两个人同时执行,A能够顺利把门打开,因为它正好在第3步的时候能拿到B归还后的红钥匙,但是对B就不一 阅读全文 »
posted @ 2021-12-03 22:34 Curryxin 阅读(568) 评论(0) 推荐(1) 编辑
摘要:动态规划 1.概念 动态规划常用于的一个问题就是求最值, 比如说最常见的求最长递增子序列啊等待。 其实动态规划的问题核心仍然是穷举,想一下求最值,那最可能的就是把所有结果列出来,谁最大要谁。 动态规划大部分是自底向上的,所以也就脱离了递归,更多的是采用for循环的迭代; 动态规划的典型类型: 背包问 阅读全文 »
posted @ 2021-08-14 03:07 Curryxin 阅读(368) 评论(0) 推荐(1) 编辑
摘要:回溯 1.概念 回溯是很经典的一个算法,什么是回溯,回溯其实是一种暴力枚举的方式,为啥都暴力了还是很经典的一种方法呢,其实是因为有些问题我们能暴力出来就不错了,就别要其他自行车了。常见的回溯类问题:组合;排列;切割;子集;棋牌; 其实回溯算法就是常说的DFS,本质上是一种暴力枚举算法; 回溯算法常用 阅读全文 »
posted @ 2021-08-14 00:48 Curryxin 阅读(5953) 评论(4) 推荐(12) 编辑
摘要:滑动窗口 1.概念 滑动窗口是一类很常见的题型,最常见的就是子串问题,因为滑动窗口是一个连续的,所以很容易就是问满足条件的最大或者最小子串啊,这个条件就是不同的地方,但万变不离其宗,滑动窗口就是一个窗口的移动。 总之:子串+最值 --> 滑动窗口 滑动窗口有两大类 固定长度的滑动窗口:窗口的大小是固 阅读全文 »
posted @ 2021-08-12 10:00 Curryxin 阅读(1873) 评论(1) 推荐(3) 编辑
摘要:二分查找 1.概念 如果想要在数组中查找一个数,最基本的方法就是暴力解法:一次遍历,这时候时间复杂度是O(N),二分查找就是其中的一种优化,时间复杂度是O(logN);具体做法是一步一步逼近直到找到。前提是数组需要是一个排序数组。 定义:二分查找也称折半查找(Binary Search),是一种在有 阅读全文 »
posted @ 2021-08-05 14:03 Curryxin 阅读(1305) 评论(0) 推荐(1) 编辑
摘要:递归 1. 概念 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。 通俗的讲:函数自己调自己; 再举一例子:比如说在电影院,你想知道自己在第几排,但是人太多黑咕隆咚的你也不能去数,怎么办呢 阅读全文 »
posted @ 2021-07-26 21:50 Curryxin 阅读(380) 评论(0) 推荐(0) 编辑
摘要:二叉树 1.基本概念 二叉树是每个节点最多有两个子树的树结构,度可能是0,1,2; 完成二叉树:从左到右依次填满; 满二叉树:除了叶子节点,所有节点都有两个孩子,并且所有叶子节点在同一层; 2.性质 1.完全二叉树除了最后一层外,下一层节点个数是上一层两倍, 如果一颗完全二叉树的节点总数是n,那么叶 阅读全文 »
posted @ 2021-07-26 21:48 Curryxin 阅读(1791) 评论(4) 推荐(1) 编辑
摘要:单例模式Singleton 1.含义 单例模式:即一个类只能创建一个实例。 应用场景:程序只有一个类实例,所以可以把频繁实例化并且销毁的对象用单例模式, 比如打印机,一个计算机有多个打印机的时候,只能创建一个实例,避免两个打印作业同时输出到打印机; 比如任务管理器,这就是单例模式; 只有一个实例 - 阅读全文 »
posted @ 2021-07-20 20:09 Curryxin 阅读(68) 评论(0) 推荐(0) 编辑
摘要:排序 1.问题引出 给定一个整数数组,按从小到大的数组将其进行排序; 2.冒泡排序 2.1 思路 冒泡排序应该是最简单的一种排序算法了,其特定是是一种稳定的排序算法; 一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。 假设待排序序列为 (5, 阅读全文 »
posted @ 2021-07-15 11:17 Curryxin 阅读(105) 评论(0) 推荐(0) 编辑
摘要:KMP算法 1.问题引出 字符串匹配问题 所谓字符串匹配,是这样一种问题:“字符串 P 是否为字符串 S 的子串?如果是,它出现在 S 的哪些位置?” 其中 S 称为主串;P 称为模式串。也就是在S串中找P串,并返回S串中出现的位置; 也就是leetcode的第28题 2. Brute-Force( 阅读全文 »
posted @ 2021-07-15 10:18 Curryxin 阅读(313) 评论(0) 推荐(0) 编辑

Live2D
欢迎阅读『经典结构和算法』
点击右上角即可分享
微信分享提示