![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 88
包括我学习算法时的笔记,和我对算法的总结
FARO_Z
还好有好好学,毕业没失业
展开
-
【算法】遗传算法及其 Java 实现
动态算法相较于静态算法,其不会随着数据量的增大,造成计算耗时的成倍增加,且其也能用来算一些诸如货郎问题这样的 np 问题原创 2022-03-04 14:28:18 · 6343 阅读 · 2 评论 -
【算法】轮盘赌法及其 java 实现
轮盘赌法是遗传算法中必要的一环,这篇文章将阐述轮盘赌法的实现以及为什么要在遗传算法中使用它原创 2022-03-03 15:45:55 · 8556 阅读 · 0 评论 -
【Day15】每天三算法 单词逆序、最长连续子序列、约瑟夫问题
文章目录【Day15】每天三算法题目NC89 字符串变形描述思考题解小结NC95 数组中的最长连续子序列描述思考题解小结NC132 环形链表的约瑟夫问题描述思考题解【Day15】每天三算法题目NC89 字符串变形描述对于一个长度为 n 字符串,我们需要对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。示例1原创 2022-01-08 14:37:34 · 778 阅读 · 0 评论 -
【Day14】每天三算法
算法无论是应对面试笔试,还是培养编程思维,都是至关重要的,我每天都会在牛客精选三道算法题,意图帮助各位,顺便勉励自己,好好刷算法题。原创 2022-01-01 17:01:50 · 980 阅读 · 0 评论 -
【Day13】每天三算法
算法无论是应对面试笔试,还是培养编程思维,都是至关重要的,我每天都会在牛客精选三道算法题,意图帮助各位,顺便勉励自己,好好刷算法题。原创 2021-12-31 16:08:20 · 877 阅读 · 0 评论 -
【每天三算法 Day12】01背包问题专栏
文章目录【Day12】01背包问题专栏一、前言二、动态规划简介三、题目描述NC145 01背包描述思考题解四、小结【Day12】01背包问题专栏一、前言动态规划可是解决许多问题的常用思路了,其中,又属 01 背包问题最为经典今天,就让我们走进 01 背包的专栏,吃透之后,从此碰到动态规划再也不会害怕了二、动态规划简介动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解,这个解,可以用状态转移方程表示。当获得状态转移方程后,原创 2021-12-07 17:31:33 · 564 阅读 · 0 评论 -
【Day11】每天三算法
【Day11】每天三算法文章目录【Day11】每天三算法题目NC58 找到二叉搜索树中的两个交换节点(esay)描述思考题解NC142 最长重复子串(medium)描述思考题解NC144 不相邻最大子序列和(medium)描述思考题解题目NC58 找到二叉搜索树中的两个交换节点(esay)描述一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请按升序输出这两个错误节点的值。(每个节点的值各不相同)搜索二叉树:满足每个节点的左子节点小于当前节点,右子节点大于原创 2021-12-01 15:52:20 · 276 阅读 · 0 评论 -
【Day10】每天三算法
【Day10】每天三算法文章目录【Day10】每天三算法题目NC91 最长上升子序列(三)描述思考题解NC32 求平方根描述思考题解NC121 字符串的排列描述思考题解题目NC91 最长上升子序列(三)描述给定数组 arr ,设长度为 n ,输出 arr 的最长上升子序列。(如果有多个答案,请输出其中 按数值(注:区别于按单个字符的ASCII码值)进行比较的 字典序最小的那个)示例1输入:[2,1,5,3,6,4,8,9,7]返回值:[1,3,4,8,9]示例2输入:[1,2,原创 2021-12-01 15:51:24 · 212 阅读 · 0 评论 -
【Day7】每天三算法
文章目录题目CC21 包围区域描述思考题解小结CC22 二叉树根节点到叶子节点的所有路径和描述思考题解小结CC23 最长的连续元素序列长度描述思考题解小结题目CC21 包围区域描述现在有一个仅包含‘X’和‘O’的二维板,请捕获所有的被‘X’包围的区域捕获一个被包围区域的方法是将被包围区域中的所有‘O’变成‘X’例如:X X X XX O O XX X O XO X X X执行完你给出的函数以后,这个二维板应该变成:X X X XX X X XX X X XO X X X思原创 2021-11-02 16:22:56 · 158 阅读 · 0 评论 -
【Day5】每天三算法
文章目录题目CC12 拆分词句描述思考题解CC9 找环形链表入口描述思考题解CC16 分糖果描述思考题解小结题目CC12 拆分词句描述给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“nowcode”;dict=["now", "code"].返回true,因为"nowcode"可以被分割成"now code".思考这道题,虽然标注为动态规划,但是我们可以用回溯的思想解原创 2021-10-24 14:45:02 · 128 阅读 · 0 评论 -
【Day3】每天三算法
文章目录【Day3】每天三算法题目WC134 设计 LRU题目思考题解小结WC133 子数组的最大累加和问题题目思考题解WC135 两个链表生成相加链表题目思考题解【Day3】每天三算法题目WC134 设计 LRU题目链接题目设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能1、 set(key, value):将记录(key, value)插入该结构2、get(key):返回key对应的value值提示:1.某个key的set或get操作一旦原创 2021-09-24 19:17:41 · 153 阅读 · 0 评论 -
LRU 最近最少用算法的实现
LRU学过 OS 的都知道,缓存有几个缓存淘汰机制,其中最有名的,就是 LRU 缓存淘汰机制即在缓存快满的情况下,将最近使用最少的内存空间腾出来那这个算法具体是怎么实现的呢?下面就让我们来探究一下一、LRU 工作流程我们先来看一下,LRU 具体是个什么流程:假设我们的缓存大小为 3,目前已经存入了三个数 1,2,3:[1,2,3]这时我们使用了2,那 2 就是最近使用的数,被提到最前面:[1,3,2]这时我们想插入一个 4,因为 1 是最近最少用的值,我们将 1 替换掉:[3,2,4]原创 2021-08-05 15:52:40 · 248 阅读 · 0 评论 -
【算法】树
树其实,树相关的题是我觉得应该第一个刷的,刷树相关的题目,可以很好的培养我们的递归思维和增加我们对指针操作的熟练度,为我们之后的算法学习,打下一个坚实的基础。在刷树的相关题目之前,我们先把树的数据结构熟悉一下(这里的树,统一为二叉树,如果是多叉树我们再另说)public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode() {}原创 2021-07-28 20:45:40 · 201 阅读 · 0 评论 -
【算法】搜索算法
文章目录搜索算法一、深度优先695 - 岛屿的最大面积题目思路题解547 - 省份数量(未完成)题目思路题解417 - 太平洋大西洋水流问题题目思路题解二、回溯46 - 全排列题目思路题解77 - 组合题目思路题解79 - 单词搜索题目思考题解51 - N皇后问题题目思考题解三、广度优先934 - 最短的桥题目思考题解126 - 单词接龙2题目小结深度优先(DFS)和广度优先(BFS)的区别搜索算法搜索算法分为深度优先和广度优先,常用在树和图的搜索上面树的 DFS 和 BFS 比较容易,我这里不会介绍原创 2021-07-27 12:59:43 · 3892 阅读 · 0 评论 -
【算法】双指针
文章目录双指针一、两数之和167-两数之和 II题目思考题解二、归并两个有序数组88-合并两个有序数组题目思考题解283-移动零题目思考题解三、快慢指针142-环形链表2题目思考题解四、滑动窗口76-最小覆盖子串题目思考题解小结双指针双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多 个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以原创 2021-07-10 17:46:39 · 258 阅读 · 0 评论 -
【算法】链表
文章目录链表一、基本操作206-反转链表(必须牢记)题目思考题解21-合并有序链表题目思考题解24-两两交换链表节点题目思考题解二、其他操作160-相交链表题目思考题解234-回文链表题目思考题解小结链表链表是我们的老朋友的,我们也许对链表的操作聊熟于心,但是对于链表的套路题,我们还真不一定了解一、基本操作206-反转链表(必须牢记)题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->原创 2021-07-04 19:43:46 · 298 阅读 · 2 评论 -
【算法】字符串
文章目录字符串一、字符串比较242-有效的字母异位同题目思考题解205-同构字符串题目思考题解647-回文子串题目思考题解656-计数二进制子串题目思考题解二、字符串理解227-基本计算器题目思考题解三、字符串匹配28-实现 strStr()题目思考题解小结字符串字符串是我们开发中常遇到的问题,需要好好掌握一、字符串比较242-有效的字母异位同题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "naga原创 2021-07-03 21:30:30 · 187 阅读 · 2 评论 -
回溯算法 马里奥式学习法
前言回溯算法,其实一点也不难,难的是起步,和写了就忘。但是,最近玩的一款游戏《超级马里奥:奥德赛》给了我灵感,这款游戏,就是在开始的时候,把所有基础动作都交给你。只要你能在不断练习中,熟悉这些基础操作,那么,对于后期再难的关卡,你都能从容应付。所以,我认为,只要掌握一套回溯算法的模板,并对着这套模板持续刷题练习,那很快就能掌握回溯的解题思路,从而在日后面对回溯问题的时候,才能从容不迫。在接下来的内容中,我会总结一套回溯算法的思路,然后在几乎每道题中,都根据这个思路,来思考怎么解决回溯问题。回溯算原创 2021-03-18 00:51:50 · 247 阅读 · 0 评论 -
算法设计与分析 时间复杂度 主定理
前言这是我为了方便明天考试之前复习放的博客,没有任何学习价值。我实在不明白,我们计算机专业学算法设计,为什么要花大量时间练习怎么算程序的运行时间?这种东西不是通过程序的逻辑,可以直接判断出来的吗?花大量时间在这上面,不如把时间分过来再多教一点算法。学校的教学方式这么主次不分,只能说学校太垃圾了。主定理公式例子归并排序对于归并排序,其运行时间的递推式为 : T(n)=2T(n/2)+O(n); (2T(n/2)是左右两边都要归并的时间,O(n)是合并有序表的时间)可得 :a=2 ,原创 2020-06-23 00:26:58 · 466 阅读 · 0 评论 -
算法设计与分析 动态规划 最长公共子序列 C++实现 19180319 算法设计与分析演讲稿
最长公共子串前言最长公共子序列介绍实现原理1.暴力算法2.动态规划代码展示时间复杂度分析前言这篇博客是为了方便我的算法设计与分析课程的讲解的,是作业驱动型,所以不会太适合用来学习最长公共子序列介绍子串和子序列的区别,一言以蔽之,子串是连续的,子序列可以是不连续的,这里我借用别人的图来介绍一下实现原理1.暴力算法如果使用暴力算法,大致思想是将str1中的所有可能子序列提取出来,然后在str2中寻找,是否有对应的子串,如果有,则储存起来。这个方法其实只要稍微想一想,就是十分不合理的,首原创 2020-06-14 14:45:10 · 807 阅读 · 1 评论 -
算法设计与分析 动态规划 最长公共子串 C++实现
最长公共子串前言最公共长子串介绍实现原理1.暴力算法2.动态规划代码展示时间复杂度分析前言这篇博客不是偏向讲解型的,网上图文详细的算法相关的文章有很多,比我写的好的有更多,我写这个只是想在学习完后有个记录,方便日后如果忘记了,可以通过博客快速回忆。最公共长子串介绍子串和子序列的区别,一言以蔽之,子串是连续的,子序列可以是不连续的,这里我借用别人的图来介绍一下而最长公共子串,就是要找到两条字符串中最长的相等子串实现原理1.暴力算法暴力算法解决这个问题,大致思想就是在第一条字符串中依次原创 2020-06-13 17:12:20 · 607 阅读 · 0 评论