编程算法思想
文章平均质量分 74
奇喑
长风破浪会有时,直挂云帆济沧海!
展开
-
透析极大极小搜索算法和α-β剪枝算法(有案例和完整代码)
结合具体案例和算法代码带你彻底弄懂极大极小搜索算法和α-β剪枝算法原创 2022-02-17 19:50:42 · 7363 阅读 · 16 评论 -
深度优先搜索之记忆化dfs
文章目录前言朴素dfs的求解思路记忆化dfs的求解思路将整数按权重排序题目描述解题思路朴素dfs记忆化dfs小结矩阵中的最长递增路径题目描述解题思路朴素dfs记忆化dfs小结统计所有可行路径题目描述解题思路朴素dfs记忆化dfs小结学生出勤记录 II题目描述朴素dfs记忆化dfs小结“马”在棋盘上的概率题目描述记忆化dfs骑士拨号器题目描述记忆化dfs记忆化dfs与棋结语前言前不久,我写一篇bfs的进阶版双向bfs:广度优先搜索之双向bfs这篇文章主要是讲述对于一些特定的bfs问题,可以使用两头齐搜的原创 2021-08-22 18:28:45 · 3028 阅读 · 3 评论 -
广度优先搜索之双向bfs(实操篇)
文章目录前言朴素bfs的求解思路双向bfs的求解思路单词接龙题目描述朴素bfs双向bfs小结打开转盘锁题目描述双向bfs滑动谜题题目描述双向bfs公交路线题目描述双向bfs结语前言对于bfs(广度优先搜索)相信大家都有所耳闻,在很多场合下都会用到它,比如最经典的树的层次遍历以及图的广度搜索。但是对于双向bfs也许就大家就会感到一些陌生了,双向bfs,顾名思义就是从两边同时进行bfs遍历,但是为何会需要使用双向bfs呢?(以下的图片以及描述来自力扣三叶姐)使用朴素 bfs 进行求解时,队列中最多会存在“原创 2021-06-28 22:14:00 · 4422 阅读 · 1 评论 -
统计字典序元音字符串的数目(一题三解)
文章目录前言题目描述回溯算法动态规划数学(盒子放球模型)结语前言突然间发现自己好久没写有关算法题的博客了,今儿来一道很有意思的算法题,它可以使用三种完全不同的思路来处理,话不多说,直接上题。题目描述给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。例如:输入:n=2输出:15解释:仅由元音组原创 2021-06-23 22:19:29 · 896 阅读 · 1 评论 -
自定义合并table行/列
文章目录前言处理思路数据预处理创建目标表格结语前言我们有如下的一组原始数据: const data = [ ['阶段', '年份', '投入费用', '投入费用', '合计'], ['构建期', 2012, 1212, 1300, 29], ['构建期', 2013, 154, 154, 29], ['运营期', 2014, 154, 154, 484] ];用原生table将其绘制出来原创 2021-05-08 23:06:11 · 1657 阅读 · 0 评论 -
table数据转换算法
文章目录前言构造dom元素将原始数据进行排序数据重组最终代码结语前言我们有如下的一组原始数据,现在我们需要在vue里使用原生table标签将其展示。 data: [ { paraValue: [ { canshu: "参数名称" }, { moren: "默认配置" },原创 2021-03-21 21:24:06 · 452 阅读 · 2 评论 -
一道工作中遇到的回溯算法题
文章目录问题描述解决思路求解组合原题解答结语问题描述2020年有12个月,我们想得到如下格式的所有数据组合集合的结果:[['2020-01'], ..., ['2020-12'],['2020-01','2020-02'],...,['2020-11','2020-12'],...['2020-01',...,'2020-12']]仔细观察上述目标结果,其实最终结果是一个二维数组,外层数组的元素正好是组合和C121C_{12}^1C121+…+C1212C_{12}^{12}C1212的原创 2021-03-16 18:10:48 · 529 阅读 · 0 评论 -
一道工作中经常遇到的数据转换算法题
文章目录问题描述解决思路课后练习习题答案小结问题描述将原数据类型转换为目标数据类型。原数据类型如下:const list1 = [ { typeId: 1, off: '111,222', on: '333,444', }, { typeId: 2, off: '111,222', on: '333,444', }, { typeId: 3,原创 2021-03-06 21:52:39 · 398 阅读 · 2 评论 -
力扣题解之暴力动态规划
文章目录题目介绍解决方案暴力动规扩展题结语题目介绍在开始解决这道题之前,我们不妨先将题目条件修改一点:将上、下、左、右四个方向之一移动改为下、右两个之一方向移动。解决方案修改条件之后的题目就是一道很经典的动态规划题目,使用动态规划的经典解决手段–填表法不难得出其状态转移方程为:rowMax = Math.max(dp[i - 1][j], Math.abs(heights[i - 1][j] - heights[i][j]));colMax = Math.max(dp[i][j - 1], M原创 2021-01-30 21:31:24 · 608 阅读 · 0 评论 -
进阶动规之01背包及其扩展问题
01背包问题:有一个背包,容量为4榜,现有如下物品要求:1.达到的目标为装入的背包的总价值最大,并且重量不超出2.装入的物品不能重复**思路:**使用动态规划的思想来解决此问题,既然是要使用动态规划,那么首当其冲的一点是找到此问题的状态转移方程。此题由于有价值和容量两个变量,所以我们定义一个二维数组dp来记录当前的最优解(即使得满足要求的最大价值)。为了更容易的找到状态转移方程,我们先...原创 2019-08-05 21:49:26 · 608 阅读 · 0 评论 -
神奇的回溯算法
通俗点描述,回溯是基于递归的基础上使得某一步在回归到上一步时能够改变上一步的策略而产生一种新的递归方案,其本质是一种枚举。所以回溯并不算是一种非常高效的算法,但是是一种很有效的算法,因为其时间复杂度很高,如果以暴力枚举为O(n^n)的时间复杂度,回溯的时间复杂度一般也到底O(n!)。下面举几个例子来细品回溯的味道。迷宫问题问题简述:在一个由两位数组所构成的迷宫中(迷宫的最外围是墙,迷宫里面有...原创 2019-07-23 16:03:56 · 308 阅读 · 0 评论 -
初识动态规划
动态规划的英文名为Dynamic Programming,是一种分阶段求解决策问题的数学思想,后来沿用到编程领域。在运筹学中,动态规划的原理也叫最优化原理,其包括如下性质:对于多阶段问题的最优化策略,如果用它的前i步策略产生的情况(加上原有的约束条件)来形成一个前i步问题,那么所给最优策略的前i阶段的策略构成这前i步问题的一个最优策略。在运筹学中用动态规划方法求解多阶段决策问题的一般步骤为:...原创 2019-07-10 17:38:09 · 188 阅读 · 0 评论 -
数组中的二分查找
先谈谈二分查找,原创 2019-06-08 22:12:53 · 585 阅读 · 0 评论 -
字符串的四则运算
题目1:字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注:不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。思路:由于在字符串上进行操作,所以不难想到字符串的拼接(append),又由于字符串中的字符是表示ANSI值不能直接将其视为数字进行拼接,所以便想到让其与’0’字符作差后再进行作和和拼接。具体代码如下:public...原创 2019-05-28 11:27:04 · 1615 阅读 · 0 评论 -
两个经典回文字符串问题中的巧妙算法
问题一:(最长回文子串)给定一个字符串 s,找到 s 中最长的回文子串。第一眼的想法是暴力法,由于其时间复杂度高达O(n^3),当s过长时效率会特别低。方法一:中心扩展算法其思想就是遍历一遍字符串,其中在每一个点都进行以其为中心而均匀展开(分奇偶),然后找到每个点能够展开到的最大值,最后也就不难得到最长回文串了。具体代码如下:public String longestPalindrome...原创 2019-05-19 22:53:00 · 1343 阅读 · 0 评论 -
编程算法思想小结
编程算法思想小结1.0,1思想:在某些编程问题需要表示事物两种不同的状态,这时候就需要用到0,1思想。例1:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?这个题中显然有在场和离场两种状态,此时就可以用1表示在场(数组初始化为1),用0表示离场表示被淘汰离场(按条件每计数到3的数组就赋值为0)。有了这个思想作为此题的突破...原创 2019-05-09 11:17:59 · 510 阅读 · 0 评论