
Algorithm
算法
拥抱@
时刻提醒自己:自信力 自控力 执行力 精准的语言表达能力 敏锐的逻辑思维
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
KMP算法学习总结
最近学习KMP算法,Gosh,感觉上就是一个简简单单的字符串模式匹配算法,但是在网上查阅相关的文档资料,一个比一个讲的晦涩。最后还是找到了比较友好的一些总结。精挑细选,大家可以参考下边几篇比较容易理解。KMP算法学习地址1KMP算法学习地址2//个人感觉第二篇对于next[]数组部分好理解一下...原创 2021-09-24 12:49:05 · 269 阅读 · 0 评论 -
Leetcode.198.337——打家劫舍系列
dp经典问题问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。原创 2021-07-09 11:18:39 · 205 阅读 · 1 评论 -
Leetcode.322——零钱兑换 两种解法DFS/DP
问题描述:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0示例 4:原创 2021-07-09 09:36:19 · 332 阅读 · 0 评论 -
leetcode.207——简单的拓扑排序解决课程表问题
问题描述:你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。示例 1:输原创 2021-07-07 15:27:36 · 314 阅读 · 0 评论 -
DFS个人训练-leetcode-200-岛屿数量 (持续更)
1.岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。思路:遍历岛这个二维数组,如果当前数为1,则进入感染函数并将岛个数+1感染函数:其实就是一个递归标注的过程,它会将所有相连的1都标注成2。为什么要标注?这样就避免了遍历过程中的重复计数的情况,一个岛所有的1都变成了2后,遍历的时候就不会重复遍历了。建议没想明白的同学画个图看看代码原创 2021-07-06 17:52:15 · 206 阅读 · 0 评论 -
算法篇——汉诺塔
1.研究背景 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘, 在三根柱子之间一次只能移动一个圆盘。法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒...原创 2020-01-16 10:05:37 · 3166 阅读 · 0 评论 -
算法篇——约瑟夫环
问题背景据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-...原创 2020-01-13 12:00:44 · 4312 阅读 · 0 评论 -
算法篇——RSA算法
1.导语:公钥和私钥原理公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密码)方式的提高。我用电子邮件的方式说明一下原理。使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的: 1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。 2. 必须保证是我发送的邮件,不是别人冒充我的。要达到这样的目标必须发送邮件的两人都有公钥和私钥。...原创 2019-12-20 17:31:49 · 2446 阅读 · 0 评论 -
算法篇——并查集
并查集 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算...原创 2019-07-11 00:32:08 · 245 阅读 · 0 评论 -
算法篇——回溯法
写在前面: 回溯法非常适合由多个步骤组成的问题,并且每个步骤都有多个选项。当我们在某一步选择了其中一个选项时,就进入下一步,然后又面临新的选项。我们就这样重复选择,直至达到最终的状态。 通常回溯法算法适合用递归实现代码。当我们到达某...原创 2019-05-25 18:33:17 · 582 阅读 · 0 评论 -
算法篇——贪心算法和动态规划
写在前面:动态规划和贪心算法这几天真的是让我很费神。今天,就拎出来好好在这说一说。举例:给你一根长度为n的绳子,请把绳子剪成m段,请问最终每段绳子长度的乘积是多少?例如,当绳子的长度为8时,我们剪成3,3,2三段,最大乘积是18。接下来,我们分别用这两种方法求解。动态规划可以应用动态规划求解的问题的特点:1.求一个问题的最优解;(求绳子的乘积最大值。)2.整体问题的最优解依赖各个子...原创 2019-05-21 16:53:20 · 11335 阅读 · 9 评论 -
算法篇——平行算法
平行算法 一般是指许多指令得以同时进行的计算模式。在同时进行的前提下,可以将计算的过程分解成小部分,之后以并发方式来加以解决,或指用多台处理机联合求解问题的方法和步骤,其执行过程是将给定的问题首先分解成若干个尽量相互独立的子问 题,然后使用多台计算机同时求解它,从而最终求得原问题的解。 &n...原创 2019-03-23 14:16:12 · 1801 阅读 · 0 评论 -
算法篇——求两个字符串的最大公共子串
问题:有两个字符串str和str2,求出两个字符串中最长公共子串长度。比如:str=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最长公共子串长度为5。算法思路:1、把两个字符串分别以行和列组成一个二维矩阵。2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。3、通过查找出值为1的最长对角线就能找到最长公共子串。针...原创 2019-03-20 08:21:02 · 4907 阅读 · 1 评论 -
算法篇——斐波那契数列第N项的多种解决方式:递归,非递归,尾递归
1 2 递归算法的时间复杂度:递归的总次数*每次递归的数量。 3 4 递归算法的空间复杂度:递归的深度*每次递归创建变量的个数。 5 6 //fib的三种实现方式 7 8 9 #include<stdio.h> 10 11 //递归的方式 12 int fib_1(int n) 13 { 14 if (n&l...原创 2019-01-04 15:06:02 · 3290 阅读 · 0 评论 -
算法篇——银行家算法
#include "string.h"#include "iostream"using namespace std;#define FALSE 0#define TRUE 1#define W 10#define R 20//声明全局变量int M ; //总进程数int N ; //资源种类int ALL_RESOURCE[3] ;//各种资源的数目总和int MAX[...原创 2019-01-04 13:53:32 · 1402 阅读 · 1 评论