![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
weixin_44460781
这个作者很懒,什么都没留下…
展开
-
回溯算法+例子:全排列和八皇后问题
一、什么叫回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程汇总寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。 二、回溯算法思想 回溯法一般都用在要给出多个可以实现最终条件的解的最终形式。要解决回溯问题,只需考虑三个问题: 1、路径:也就是已经做出的选择 2、选择列表:也就是当前可以做的选择 3、原创 2021-01-18 17:03:31 · 62 阅读 · 0 评论 -
递归
递归内涵 递归的三大要素 第一要素:明确你这个函数想要干什么 对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。 例如,我定义了一个函数 // 算 n 的阶乘(假设n不为0) int f(int n){ } 这个函数的功能是算 n 的阶乘。好了,我们已经定义了一个函数,并且定义了它的功能是什么,接下来我们看第二要素。 第二要素:寻找递归结束条件 所谓递归,就是会原创 2021-01-16 16:42:37 · 77 阅读 · 0 评论 -
03.链表
1.基本介绍 链表是有序的列表,特点: 链表是以节点的方式来存储,是链式存储 每个节点包含 data域:存放数据 next域:指向下一个节点 链表 在某些操作上比数组更加高效。例如当进行插入和删除操作时,链表操作的时间复杂度仅为O(1) 2.单链表 public class SingleLinkedList { //先初始化一个头结点 private HeroNode head = new HeroNode(0, "", ""); //添加节点 //1.找到当前链原创 2021-01-11 19:15:17 · 57 阅读 · 0 评论 -
02.队列
1.介绍 队列只允许在一端进行插入操作,而在另一端进行删除操作,是有序列表,遵循先进先出 2.代码实现 2.1 数组模拟队列 //数组模拟队列 public class ArrayQueue { private int maxSize;//数组最大容量 private int front;//队列头指针 private int rear;//队列尾指针 private int[] arr;//模拟队列 //创建队列 public ArrayQueue(i原创 2021-01-11 15:36:48 · 46 阅读 · 1 评论 -
01.稀疏数组
1.基本介绍 当一个数组中大部分元素为0,或者为同一元素值时,或者无效数据量远大于有效数据量,可以使用稀疏数组来保存该数组 处理方法: 1) 该数组第一行记录原数的总行数、总列数、非0数据个数 2) 接下来的每一行存储非0数所在行、所在列、具体值 2.代码 public class SparseArr { public static void main(String[] args) { //创建一个原始的11*11的二维数组 //0表示没有棋子,1原创 2021-01-11 15:34:08 · 35 阅读 · 0 评论 -
求最大公约数
假如d是整数a和整数b的公约数,那么有d|a和d|b,即整数a和b都能被d整除,其中满足条件最大的d叫做a和b的最大公约数,记作d=gcd(a,b) 欧几里得算法(辗转相除) 不失一般性,假设 a > b 且 b != 0,记整数 a 和 b 的最大公约数是函数 gcd(a, b)。假设它们之间存在关系 a = b * k + r。 这里 k 是倍数,是一个整数(k = a / b),r 是余数(r = a % b),也是一个整数。用记号 ∣ 表示整除关系,例如 2 | 6。 看等式右边,根据定.原创 2020-10-14 16:20:09 · 155 阅读 · 0 评论