![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法类
文章平均质量分 62
zhanle_huang
喜欢编程、对编程有着自己的热情,目前是前端开发为主,平时喜欢研究一些自己觉得好玩的代码
展开
-
字符串转换整数 ,js实现
如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1。将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。ps:leetcode心得记录。原创 2023-07-05 15:06:32 · 248 阅读 · 0 评论 -
leetcode整数反转,js实现
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。假设环境不允许存储 64 位整数(有符号或无符号)。原创 2023-07-03 11:13:53 · 351 阅读 · 0 评论 -
左到右进行 Z 字形排列,js实现
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。PS:leetcode心得,欢迎交流。第一和最后一层相同,据观察。不同层级时,下标排列如下。原创 2023-06-29 09:28:14 · 189 阅读 · 0 评论 -
回文字符串,js实现
这题最好想到的思路就是找到一个数然后从两端开始找,即中心扩散法。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。给你一个字符串 s,找到 s 中最长的回文子串。ps:leetcode刷题随笔,欢迎交流。原创 2023-06-27 11:51:24 · 577 阅读 · 0 评论 -
寻找两个正序数组的中位数,js实现
中位数位置计算规则如下:数据个数是奇数时,中位数是下标为arr[len/2],当数据个数是偶数时,中位数是下标为(arr[len/2] + arr[len/2-1]) / 2。给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数。由于O(log (m+n))意味着我们需要采用类似二分法的思路,算法的时间复杂度应该为 O(log (m+n))。PS:leetcode心得,坚持刷,欢迎交流。原创 2023-06-26 11:48:17 · 368 阅读 · 0 评论 -
重复子串问题,滑动窗口求解,js实现
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。PS:该文是对leetcode的知识笔记,欢迎交流。原创 2023-06-20 16:59:06 · 128 阅读 · 0 评论 -
力扣红蓝灯算法思路( 前缀一致)
记录下翻牌的最大值,如果还没到最大值的位置,就算 1-i全是1也不对,因为最大值位置是1所以当检查的下标i+1 = max的时候,就说明1-i的位置都是1,后续的位置是没有翻开的因为flips存储的是1开始,循环是0开始,因此需要i+1。原创 2023-06-19 16:41:51 · 597 阅读 · 0 评论 -
采用动态规划来处理有向无环图最短路径问题,c++实现
如图,在一个无环有向图中,找到起点0到终点的最短路径。原创 2023-06-06 11:53:33 · 649 阅读 · 0 评论 -
动态规划求解最长公共子序列通俗易懂,c++实现
最后取结果的时候,从后往回取,状态是1的则表示符合最长公共子序列,如果是2左移(左移是因为我们在前面设置条件的时候设置了关系),否则上移。ps:本文算法不是最优写法,只是为了容易理解,把代码写的更加易读和输出了计算过程的信息。原创 2023-05-05 14:06:07 · 598 阅读 · 0 评论 -
超容易理解的方式去解释动态规划之01背包问题,c++实现
动态规划之01背包问题,c++实现问题描述算法实现结果问题描述01背包问题问题分析动态规划法分析:1.划分子问题,2.得出子问题的递推公式,3.填表划分子问题用数组V[n][n]存储价值和重量关系,行表示物体,列表示重量第0行和第0列设置为0,没有物体的时候价值没0,重量为0的时候物体无论多少价值也为0如果第i个物体重量小于当前总重量j,则取前i-1和第i个物体组合的最优值,否则该物体不可以放进背包,取前i-1个物体的最优价值递推公式不装入背包时:V(i-1, j) j <原创 2022-04-08 18:24:00 · 1597 阅读 · 0 评论 -
动态规划求序列的最长递增子序列,c++实现
动态规划求序列的最长递增子序列,c++实现描述算法实现结果输出描述求序列的最长递增子序列问题剖析划分子问题只有一个序列的时候,就是序列本身,且长度为1序列长度大于2的时候,用L[n]数组存放每个子问题的最长长度,每i个序列位置的处理,都以其前i-1个已经找到的当前最长比较最后一位是否符合递增符合,并且其长度L[i-1]+1大于子问题目前的最大长度,则长度L[i-1]+1,L[i] = L[i-1]+1, 使用arr[i][n]存放每一个子问题的最长序列递推公式长度为1时,L(1原创 2022-04-08 10:24:52 · 1115 阅读 · 0 评论 -
采用动态规划思维求解数塔问题,c++实现
采用动态规划思维求解数塔问题,c++实现数塔问题算法实现结果数塔问题问题描述: 加粗样式从塔顶往下走,如何走过的步数最大问题分析:数塔游戏(5层)从塔顶到塔底,走过的值最大从第一层开始,往左走还是往右走,变化两个4层他的问题,因此改问题存在子问题重叠性质由于该问题要求走过的值最大,因此,该问题存在要求最优解,因此符合动态规划用法递归求解过程:塔数据用二维数组存储d[5][5],规划表格用maxD[5][5]存储(用来存储子问题的解),该结构是下三角结构划分子问题:第1层走左还原创 2022-03-30 16:53:40 · 4551 阅读 · 0 评论 -
数组排序之堆排序,c++实现
数组排序之堆排序,c++实现问题描述算法实现结果如下问题描述采用堆排序的方法去排序一个数组{47, 35, 26, 20, 18, 7, 13, 10}数组对应堆的图例,根节点大于左右孩子节点分析:组建堆,第i个节点和其左右孩子分别对应第2i + 1和2i + 2下标的数据如何确定堆有几层?如下数组的最后一个值的下标为n其父节点为i,所以存在关系n = 2*i+1 => i = (n-1)/2即第0i个节点是有子节点,i+1n个节点是叶子节点首次建堆处理,把树处理层,根节点大于或原创 2022-03-22 17:41:31 · 1856 阅读 · 0 评论 -
减治法应用在插入排序算法
减治法应用在插入排序算法问题描述算法实现问题描述采用减治法进行插入排序减治法是将问题分割成子问题,子问题的解跟原问题存在某种关系,(划分为有序区和无序区)初始时,将第0个位置设置为哨兵(防止越界)划分有序区和无序区,第1个位置为有序区,其余为无序区从第二个位置开始,在有序区中查找位置插入算法实现// # 1. 减治法排序之插入排序// # 2. 初始时,将第0个位置设置为哨兵(防止越界)// # 3. 划分有序区和无序区,第1个位置为有序区,其余为无序区// # 4. 从第二个位原创 2022-03-21 17:50:50 · 1672 阅读 · 0 评论 -
典型递归求解之汉诺塔问题,c++实现
典型递归求解之汉诺塔问题,c++实现问题分析实现总结问题分析汉诺塔问题是典型的递归问题,假设有n个盘要移动,n>0;A、B、C分别为三个柱子,A是原始柱子(有盘),B是间接柱子,C是目标柱子将n个盘从A移动到C,最终结果一定是,将n-1个盘移动到B,然后第n个盘移动到C此时,A上没有盘,B上有n-1个盘,C上有一个盘n有3可知,此时要做的是将B上的n-1个盘移动到C上,A是间接柱子此时问题的状态回到第一步的,只是原始柱子从A变成了B,重复到n==0即没有盘在A、B柱子上,算法结束。原创 2022-03-17 19:24:50 · 695 阅读 · 0 评论 -
回溯法之迷宫最短路径,c++实现
迷宫最短路径迷宫的算法很多,但是解释原理的却很少,在这里我利用自己的亲身经历来讲解一下求解迷宫的原理,迷宫求解可以利用栈结构,即深度优先,探索一个位置就标记,通则走,不同则后退寻找下一个位置,可以求出通路,简单但是不一定是最短路径,这里求最短路径利用的是广度优先的思想,什么是广度优先,利用队列实现,一个元素出对,然后访问这个元素相邻的所有元素,原理是,一个二维数组,0表示墙,1表示路,这里我利用......原创 2019-06-18 17:01:32 · 10734 阅读 · 12 评论 -
分治法之棋盘覆盖复牌问题,c++实现
分治法之棋盘覆盖复牌问题,c++实现问题描述实现问题描述一个棋盘,其中有一个特殊点,用L的骨牌去覆盖,骨牌不能重叠,如何做到全部覆盖,如图:实现采用分治法将一个棋盘划分为4个棋盘,有一个棋盘存在特殊点,其他三个棋盘没有特殊点将没有特殊点的棋盘连接,用L型骨牌连接三个棋盘,使每个棋盘变成有一个特殊点的子棋盘重复操作,直到大小为1,算法结束// 将一个棋盘划分为4个棋盘,则有三个棋盘是没有特殊点的,将这三个棋盘用一个L型骨牌连接,将会得到一个规模小的子棋盘 // # 假设特殊点的下标为d原创 2022-03-14 18:39:26 · 1058 阅读 · 0 评论 -
算法分析之快速排序算法,c++实现
算法分析之快速排序算法,c++实现快速排序算法分析第一次划分实现快速排序算法分析如图所示,数组开始是无序的,从两端开始比较,找到中间值,然后以中间值为中心点,进行分段第一次划分然后再从每一段中重复此操作,直到只剩下分段长度为1结束,即i>=j则结束实现// # 快速排序,将一个数组,找到一个中间值,然后以这个中间值为中心,分段// # 然后再从每一段中重复此操作,直到只剩下分段长度为1结束,即i>=j则结束 // 1. 定义一个分段函数,参数分别是arr(待排序数组),be原创 2022-03-14 11:52:12 · 1639 阅读 · 0 评论 -
快速排算法js版本,实用好理解
快速排序算法思想算法的思路下面是js写的代码算法思想1.快速排序采用分治的思想,将大问题分成多个子问题逐渐去解决,从而所有的子问题,所有子问题的结果组合起来就是大问题的结果。算法的思路1.单次遍历过程中2.以左边第一个值作为计数值,采用变量存放,i,j分别为左右两边的端下标,首先从右往左找比基数大的数,找到则结束该次查找循环,将找到的元素替换到i下标的位置,否则j下标向前移动3.交换一次位置,方向调转,变成从左往右找比基数大的数,找到则结束该次循环,否则,i下标后移,找到则交换查找方向4.直到原创 2021-08-09 10:07:46 · 182 阅读 · 0 评论