![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
克里斯蒂啊
这个作者很懒,什么都没留下…
展开
-
手写-字符串最长的不重复子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列原创 2021-09-24 18:02:27 · 143 阅读 · 0 评论 -
手写-查找数组公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。function longestCommonPrefix(strs) { // 求出字符串最小长度 let minLength = Math.min.apply( null,原创 2021-09-24 14:01:39 · 199 阅读 · 0 评论 -
手写-判断括号字符串是否有效
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:falsefunction isValid(string) { if (string.length % 2 === 1) { return false;原创 2021-09-24 13:29:17 · 147 阅读 · 0 评论 -
0-1背包问题
0-1背包问题0-1版本只能往背包里装完整的物品,而分数背包问 题则允许装入分数物品背包问题是一个组合优化问题。它可以描述如下:给定一个固定大小、能够携重W的背包, 以及一组有价值和重量的物品,找出一个最佳解决方案,使得装入背包的物品总重量不超过W, 且总价值最大。给定一个固定大小的背包,背包的容量为 w,有一组物品其价值和重量分别是 (2,3),(3,4),(4,5),存在对应的价值和重量,要求找出一个最佳的解决方案,使得装入背包的物品总重量不超过背包容量 w,而且总价值最大。我们来看看下面这原创 2021-07-22 10:50:13 · 128 阅读 · 0 评论 -
最少硬币找零问题(js实现)
最少硬币找零问题例如,有以下面额(硬币):1,5,10,5。 如果要找36的零钱,我们可以用1个25的硬币、1个10的硬币和1个1的硬币。 如何将这个解答转化成算法?今天我们只要采用两种方法来解决这个问题动态规划法是一种将复杂问题分解成更小的子问题来解决的优化技术,主要采用递归来解决。贪心算法遵循一种近似解决问题的技术,期盼通过每个阶段的局部最优选择(当前最好的解),从而达到全局的最优(全局最优解)。它不像动态规划算法那样计算更大的格局。接下来我们就来看看具体的代码实现吧原创 2021-07-21 10:38:50 · 1249 阅读 · 0 评论 -
javascripte二分搜索
function binarySearch(item, array) { array.sort((a, b) => a - b); let left = 0, right = array.length - 1, middle, middleItem; while (left <= right) { console.log(left, right, "left,right"); middle = Math.floor((left + right)原创 2021-07-20 17:10:58 · 47 阅读 · 0 评论 -
javascript常见的排序方法
冒泡排序(O(n2))冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至 正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。function bubbleSort(list) { let length = list.length; for (let i = 0; i < length; i++) { // 从内循环减去外循环中已跑过的轮数,就可以避免内循环中所有不必要的比较 for (let j = 0; j < length - 1原创 2021-07-20 16:49:53 · 337 阅读 · 0 评论 -
js实现Floyd-Warshall算法详解
Floyd-Warshall算法Floyd-Warshall算法是一种计算图中所有最短路径的动态规划算法。通过该算法,我们可以找出所有从所有源到所有顶点的最短路径:考虑下图:首先,我们需要声明表示上图的 邻接矩阵,如下所示:注意此图是有向图(图这种数据结构,可以参考我之前的文章ES6实现图的数据结构),A与B是相邻的,而B与A是不相邻的,array[i][j] === 0 这里我们用来表示距离为0,也就是同一个点,array[i][j] === INF 表示两个点不相邻。剩下就是具体的权值let原创 2021-07-14 18:08:47 · 257 阅读 · 0 评论 -
js实现Dijkstra算法详解
Dijkstra算法Dijkstra算法是一种计算从单个源到所有其他源的最短路径的贪心算法考虑下图:如果索引为i的节点和索引为j的节点相邻,则array[i][j] === 1,否则array[i][j] === 0,注意此图是有向图,A与B是相邻的,而B与A是不相邻的我们来看看如何找到顶点A和其余顶点之间的最短路径。但首先,我们需要声明表示上图的 邻接矩阵,如下所示:let graph = [ [0, 2, 4, 0, 0, 0], [0, 0, 2, 4, 2, 0],原创 2021-07-14 17:28:30 · 1399 阅读 · 0 评论