算法详解-动态规划-如何用智慧打败暴力
什么是动态规划? 动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划算法是一种高效的求解最优化问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,可以通过记忆化存储子问题的解,避免重复计算,...
什么是动态规划? 动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划算法是一种高效的求解最优化问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,可以通过记忆化存储子问题的解,避免重复计算,...
前言 递归是一种非常重要的编程技巧,它可以让我们用简洁的代码解决复杂的问题。 主要内容 主要内容: 递归是一种算法,它通过调用自身来解决问题。一个递归函数通常包括两个部分:基本情况(base case)和递归情况(recursive cas...
重排链表 最长递增子序列 环形链表 反转链表 最长回文子串 全排列 lru 缓存 合并k个升序链表 无重复字符的最长子串 删除链表的倒数第 n 个结点 1. 重排链表 给定一个单链表 l 的头节点 head ,单链表 l 表示为: l0 →...
双指针简介 双指针算法是一种通过设置两个指针不断进行单向移动来解决问题的算法。 它包含两种形式:快慢指针和对撞指针。 快慢指针是一种设置步长不同的两个指针,用于解决链表中的问题,如判断是否有环,找到中间节点等。 对撞指针是一种设置在序列两端...
目录 1.6 快速排序 1. 算法步骤 2. 动图演示 3.代码实现 1.7 堆排序 1. 算法步骤 2. 动图演示 3. 代码实现 1.8 计数排序 1. 计数排序的特征 2. 动图演示 3.代码实现 1.9 桶排...
目录 1.1冒泡排序 1. 算法步骤 3.什么时候最快 4. 什么时候最慢 5.代码实现 1.2选择排序 1. 算法步骤 2. 动图演示 3.代码实现 1.3 插入排序 1. 算法步骤 2. 动图演示 3. 算法实现 1.4 希尔排序...
迪杰斯特拉算法介绍 迪杰斯特拉(dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本思想 通过dijkstra计算图g...
一:深度优先搜索dfs 我们以图为例,图是由一些小圆点(顶点)和连接这些小圆点的直线(边)组成。例如: 现在我们想要遍历这个图,我们可以从1号顶点开始,遍历就是将图中每一个顶点都访问一次。使用深度优先搜索会得到这么一个结果 他们身上标注的数...
洗牌算法问题为: 有一个大小为 100 的数组,里面的元素是从 1 到 100 按顺序排列,怎样随机的从里面选择 1 个数? 最简单的方法是用rand()系统自动生成一个1-100的数,然后去数组找对应的位置即可。 进一步,问题扩展为: 有...
算法的时间复杂度和空间复杂度 算法效率 时间复杂度 空间复杂度 常见的时间复杂度以及复杂度的oj练习 算法效率 算法的复杂度 算法在编写成可执行程序后,运行时需耗费时间资源和空间资源(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两...