![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法之路
文章平均质量分 80
NormalConfidence_Man
这个作者很懒,什么都没留下…
展开
-
【算法笔记】LCR 086. 分割回文串
Java中的List变量存储的是List的地址,而非List本身,因此可以构建一个path列表,用于存储当前已经遍历的序列,当dfs向下遍历的时候则将新遍历的字符串加入path中;当向上回溯的时候,可以将path中的最后一个元素remove掉,从而恢复到上一个遍历状态。dfs遍历出来的第一个序列是[a, a, b],显然该序列都是回文子串,接着回溯,遍历下一个序列,为[a, ab],不是回文子串,去除…如此往下遍历,将符合要求的序列加入到结果集res中,直到遍历整个解空间树。原创 2023-10-11 12:14:28 · 277 阅读 · 0 评论 -
【算法】分支限界法
分支限界法是按照广度优先的策略搜索问题的解空间树,在搜索的过程中,对待处理的节点根据限界函数估算目标函数的可能的取值,从中选取使得目标函数可以取得最优的结点优先进行广度优先搜索,从而不断的调整搜索方向,尽快地找到问题的解。原创 2023-03-30 20:15:33 · 2674 阅读 · 0 评论 -
【算法】回溯法详解
回溯法在包含的所有可能解的解空间树中,从根节点出发,按照深度有限的策略进行搜索,对于解空间树的某个结点,如果该节点满足问题的约束条件,则进入该子树继续进行搜索,否则将以该节点为根节点进行剪枝。回溯法常常可以避免搜索所有可能的解,所以适合求解组合数较大的问题。原创 2023-03-25 21:47:55 · 4292 阅读 · 1 评论 -
【算法】一文详解贪心法
贪心法将一个复杂问题分解为一系列较为简单的局部最优解,每一步都是对当前解的一个扩展,直到获得问题的完全解。贪心法的典型应用时求解最优化问题,而且即使是非最优解,最终得出的解也和最优解比较近似。原创 2023-03-25 20:59:01 · 2063 阅读 · 1 评论 -
【算法】动态规划复习汇总
动态规划主要用于解决多段决策最优化的问题。动态规划通常用来解决这样的一类问题:该问题有n个输入,问题的解由这n个输入的一个子集构成,这些子集必须满足某些事先给定的,满足约束条件的子集称之为。满足约束条件的可行解往往不只有一个,因此通常会给出一定的标准用来衡量可行解的优劣,这些标准称为,使得目标函数取得最大值或者最小值的可行解称之为最优解。这类问题被称之为最优化问题。原创 2023-03-22 16:12:38 · 404 阅读 · 0 评论 -
【算法】减治法详解
左子树上的结点都小于根节点、所有右子树都大于根节点使用中序遍历可以得到一个递增的有序序列。原创 2023-03-15 18:59:35 · 3794 阅读 · 0 评论 -
【算法】分治法详解和汇总
分治法的基本思想是将一个难以直接解决的大问题划分为一些规模较小的子问题,分别求各个子问题,然后将各个子问题的答案合并成为规模较大的原问题的解。在用分治法设计算法的时候,最好使得子问题的规模大致相同。也就是将一个问题的划分称为规模相等的k个子问题,这种使得子问题规模大致相等的做法是出自一种的启发性问题。另外,在使用分治法设计算法的时候,最好使得各个子问题之间相互独立,如果各个子问题不是独立的,那么分治法会求一些重复求解的重叠子问题,这会导致做很多重复工作,使得算法的效率下降,此时使用动态规划算法更好。原创 2023-03-14 15:46:48 · 5572 阅读 · 0 评论 -
【算法】最直接的算法——穷举法详解
穷举法又称为枚举法或者蛮力法,是一种简单直接解决问题的方法,常常是基于问题的直接描述去编写程序,比如说求n的阶乘,那么就直接一个循环n次的for循环。穷举法以来的基本技术是遍历,也就是采用一定策略依次处理待求解问题的所有元素。对于穷举法自身的优化,一般只能减少其执行的系数,但是数量级不会改变。下列是一个经典穷举问题:我们知道,假设有i张10元,j张5元,k张1元,那么满足兑换方案的方程应该是ijk50并且i∗10j∗5k100。而10元最多5张,5元最多10张,1元最多50张。原创 2023-03-12 21:23:53 · 19166 阅读 · 0 评论 -
【力扣】35. 搜索插入位置 详解(含二分详解)
本题给出一个已排序的数组,而且要求时间复杂度为O(log n),很明显就是要使用二分搜索,二分搜索虽然原理简单,但是十分容易写错,因为对二分搜索的边界的判断是十分难以把握的。原创 2023-02-07 22:22:42 · 67 阅读 · 0 评论 -
常用算法的算法思想以及基本特征
算法思想递归递归并不是简单的自己调用自己,也不是简单的交互调用。递归在于把问题分解成规模更小、具有与原来问题相同解法的问题,如二分查找以及求集合的子集问题。这些都是不断的把问题规模变小,新问题与原问题有着相同的解法。但是并不是所有所有可以分解的子问题都能使用递归来求解。一般来说使用递归求解问题需要满足以下的条件:原文链接:https://blog.csdn.net/yuanmxiang/article/details/52868999分治法一个求解规模是O(n)以上的问题,如果问题规模越小,则其执原创 2022-04-03 23:23:03 · 627 阅读 · 0 评论 -
【Java】Java实现归并排序(合并排序)
简述归并是一种常见的操作,即将两个有序的数组归并成一个更大的有序数组。很快人们就根据这个操作发明了一种简单的递归排序算法:归并排序。归并排序最吸引人的性质是它能够保证将任意长度的为N的数组排序所需的时间和N*logN成正比;它的主要缺点则是他所需的额外空间和N成正比。原地归并排序...原创 2020-05-21 20:23:47 · 609 阅读 · 0 评论 -
【Java】Java实现希尔排序
概述希尔排序是一种基于插入排序的快速排序算法。如果还未掌握插入排序的可以参考我的文章:https://blog.csdn.net/weixin_45434953/article/details/104240071对于大规模的乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端。希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进...原创 2020-02-10 14:58:55 · 187 阅读 · 0 评论 -
【Java】用Java实现插入排序
插入排序简述插入排序是一种简单直观且稳定的排序算法插入排序十分像平时打牌的时候给整理扑克牌的过程通常我们在打扑克整理牌的时候,是将每一章牌插入到其他已经有序的牌之中的适当位置的插入排序也类似图自百度百科:https://baike.baidu.com/item/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F/7214992?fr=aladdin交换次数和比...原创 2020-02-09 20:54:46 · 488 阅读 · 0 评论 -
【Java】Java实现选择排序
简述选择排序是一种简单的排序算法,其流程如下:①找到数组中最小的一个元素②将它和数组的第一个元素交换③在剩下的元素中找到最小的元素④将它和数组的第二个元素作交换接下来如此往复,直到将整个数组都有序排列例子接下来我们看一个具体的例子:使用选择排序将数组{S, O, R ,T ,E , X, A, M, P, L, E}有序排列Tips:i表示排序次数 min表示最小的元素的下标...原创 2020-02-09 18:43:14 · 520 阅读 · 1 评论 -
[Java]Java实现二分查找
[Java]Java实现二分查找二分查找 又称为 折半查找,是一种常见而且效率较高的查找方式。但是二分查找要求线性表必须采用顺序存储结构,而且表中元素按照关键字排列其流程图如下:以下是代码展示:package Basic;import java.util.Arrays;import java.util.Scanner;public class BinarySearch { p...原创 2020-02-09 00:08:07 · 179 阅读 · 0 评论