算法
baoleilei6
微信号:bll1286971588 欢迎交友
展开
-
306. 累加数 回溯
累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给你一个只包含数字'0'-'9'的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数,除数字 0 之外,不会 以 0 开头,所以不会出现1, 2, 03 或者1, 02, 3的情况。示例 1:输入:"112358"输出:t...原创 2022-01-11 01:20:25 · 309 阅读 · 0 评论 -
45. 跳跃游戏 II 动态规划dp
给你一个非负整数数组nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4]输出: 2...原创 2022-01-09 23:59:16 · 175 阅读 · 0 评论 -
leetcode 1629. 按键持续时间最长的键
LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。测试人员想要找出按键 持续时间最长原创 2022-01-09 11:07:21 · 176 阅读 · 0 评论 -
611. 有效三角形的个数
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。通过次数55,071提交次数103,430来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-triangle-number.转载 2022-01-08 21:41:42 · 165 阅读 · 0 评论 -
连续字符 1446. 连续字符
给你一个字符串s,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。示例 1:输入:s = "leetcode"输出:2解释:子字符串 "ee" 长度为 2 ,只包含字符 'e' 。示例 2:输入:s = "abbcccddddeeeeedcba"输出:5解释:子字符串 "eeeee" 长度为 5 ,只包含字符 'e' 。示例 3:输入:s = "triplepillooooow"输出:5示例 4:输入:s = "hoora..原创 2021-12-04 21:42:27 · 345 阅读 · 0 评论 -
56. 合并区间
56. 合并区间难度中等1190以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:...原创 2021-11-24 00:25:15 · 165 阅读 · 0 评论 -
最长递增子序列 动态规划
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7.原创 2021-02-19 14:22:35 · 224 阅读 · 1 评论 -
14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成来源:..原创 2021-09-21 21:58:28 · 166 阅读 · 0 评论 -
for..of字符串遍历
var str="abc"; for(let i of str){ console.log(i) // => a b c; }转载 2021-09-21 21:51:31 · 437 阅读 · 0 评论 -
面试题 17.10. 主要元素
方法一:\text{Boyer-Moore}Boyer-Moore 投票算法由于题目要求时间复杂度 O(n)O(n) 和空间复杂度 O(1)O(1),因此符合要求的解法只有 \text{Boyer-Moore}Boyer-Moore 投票算法。\text{Boyer-Moore}Boyer-Moore 投票算法的基本思想是:在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。如果数组为空,则数组中不存在主要元素;如果数组中剩下的元素都相转载 2021-07-09 23:38:47 · 187 阅读 · 0 评论 -
938. 二叉搜索树的范围和
给定二叉搜索树的根结点root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例 1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10输出:23提示:树中节点数目在范围 [1, 2 * 104] 内1 <= Node.val <= 1051 &...转载 2021-04-27 23:33:21 · 181 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围 DFS BFS
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入...转载 2021-02-12 17:46:11 · 218 阅读 · 0 评论 -
单调队列详解
刚学单调队列时,在网上各大博客找文章学,说实话,写得很杂,表示自己懵逼了些许,最后硬是啃出来了,所以我决定要写一篇能让大部分人都看懂的博客来。说单调队列,那我们就先说说这个单调队列是个什么物种。单调队列从字面上看,无非就是有某种单调性的队列,没错,这就是所谓的单调队列。单调队列它分两种,一种是单调递增的,另外一种是单调递减的。在这搬出百度百科的解释:不断地向缓存数组里读入元素,也不时地去掉最老的元素,不定期的询问当前缓存数组里的最小的元素。用单调队列来解决问题,一般都是需要得到当前的某个..转载 2021-02-08 23:37:20 · 4526 阅读 · 3 评论 -
最小堆 构建、插入、删除的过程图解
1.简介 最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。2.最小堆示例3.最小堆的构建 初始数组为:9,3,7,6,5,1,10,2 按照完全二叉树,将数字依次填入。 填入后,找到最后一个结点(本示例为数字2的节点),从它的父节点(本示例为数字6的节点)开始调整。根据性质,小的数字往上移动;至此,第1次调整完成。 ...转载 2021-01-24 21:10:31 · 612 阅读 · 0 评论 -
从n个数选出最大的m个的算法比较
n×m遍扫描 【算法基本描述】n×m遍扫描 【算法思想】每次都扫描一遍数组,取出最大元素,这样扫描m遍就能得到m个最大的数 【算法复杂度】O(nm) 排序后取最大m个数 【算法基本描述】对n个数排序,对拍完序后的序列取m个最大的数 【算法复杂度】视排序的复杂度,一般为O(nlogn)或O(n^2) 计数排序(bitmap) 一次遍历数组记录出现次数O(n),倒过来变量计算m个。 最小堆 【算法基本描述】一遍扫描+最小堆 【算法复杂度】O(nlogm) 遍历O..转载 2021-01-24 20:15:05 · 1136 阅读 · 0 评论 -
为什么快速排序是不稳定的
假设待排序数组:a = [ 1, 2, 2, 3, 4, 5, 6 ];在快速排序的随机选择比较子(即pivot)阶段:若选择a[2](即数组中的第二个2)为比较子,而把大于等于比较子的数均放置在大数数组中,则a[1](即数组中的第一个2)会到pivot的右边, 那么数组中的两个2非原序(这就是“不稳定”)。若选择 a[1] 为比较子,而把小于等于比较子的数均放置在小数数组中,则数组中的两个 2 顺序也非原序 。这就说明,quick sort是不稳定的。...转载 2021-01-24 19:31:52 · 1037 阅读 · 0 评论 -
编辑距离
给定两个单词word1 和word2,计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入: word1 = "horse", word2 = "ros"输出: 3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (...转载 2020-01-12 12:53:53 · 315 阅读 · 0 评论 -
486. 预测赢家 leetcode
给定一个表示分数的非负整数数组。 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,……。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入: [1, 5, 2]输出:...转载 2020-01-05 09:25:11 · 189 阅读 · 0 评论 -
160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 ...转载 2019-12-13 10:19:48 · 213 阅读 · 0 评论 -
用js实现个优先队列吧
队列是一种很常用的数据结构,它是一组遵循先进先出(FIFO)规则的项。在现实生活中,最常见的队列的例子就是排队。队列有一些方法,入队、出队、队列的长度,清空队列等。用js实现一个普通的队列代码如下: function Queue() { var queue = []; // 队列元素个数 this.size = fu...转载 2019-12-12 19:58:52 · 366 阅读 · 0 评论 -
1021. 删除最外层的括号
/* 有效括号字符串为空("")、"(" + A + ")"或A + B,其中A 和B都是有效的括号字符串,+代表字符串的连接。例如,"","()","(())()"和"(()(()))"都是有效的括号字符串。如果有效字符串S非空,且不存在将其拆分为S = A+B的方法,我们称其为原语(primitive),其中A 和B都是非空有效括号字符串。...原创 2019-11-18 19:45:01 · 208 阅读 · 0 评论 -
Leetcode 507. Third Maximum Number 完美数
题目:对于一个正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。给定一个正整数n,如果他是完美数,返回True,否则返回False示例:输入: 28输出: True解释: 28 = 1 + 2 + 4 + 7 + 14注意:输入的数字n不会超过 100,000,000. (1e8)解题思路:把num所有的因数相加(不...转载 2019-11-18 14:47:44 · 255 阅读 · 0 评论 -
JS版本 ---N皇后
n皇后问题研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例:输入: 4输出: [[".Q..", // 解法 1 "...Q...原创 2019-11-05 22:11:54 · 317 阅读 · 0 评论 -
LeetCode 13题 罗马数字转整数 -- JavaScript
题目描述:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列...转载 2019-10-21 11:55:59 · 290 阅读 · 0 评论 -
LeetCode 第39题 组合数和
给定一个无重复元素的数组 candidates和一个目标数 target ,找出 candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。 解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7, 所求解集为: [[...转载 2019-10-21 11:33:23 · 273 阅读 · 0 评论 -
leetcode 279. 完全平方数
题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9标签:动态规划 首先初始化长度为n+1的数组dp,每个位置都为...转载 2019-10-17 20:18:37 · 244 阅读 · 0 评论 -
leetcode11_盛最多水的容器
2.双指针靠拢 矩形面积等于(right-left)*高度 在指针靠拢的过程中 宽度减小 只有让小的指针移动 才可能使高变大用双指针left=0和right=height.length-1 left和right确定一个面积时 为了寻找可能更大的/** * @param {number[]} height * @return {number} */var maxAre...转载 2019-10-15 09:52:22 · 204 阅读 · 0 评论 -
贪心算
贪心算法是动态规划方法的一个特例,可以证明每一个子树的根的值不取决于下面叶子的值,而只取决于当前问题的状况。换句话说,不需要知道一个节点所有子树的情况,就可以求出这个节点的值。由于贪心算法的这个特性,它对解空间树的遍历不需要自底向上,而只需要自根开始,选择最优的路,一直走到底就可以了。2.钱币找零问题这个问题在我们的日常生活中就更加普遍了。假设1元、2元、5元、10元、20元、50元、10...转载 2019-10-14 22:56:30 · 270 阅读 · 0 评论 -
动态规划套路详解
下面通过对斐波那契数列和这道凑零钱问题详解动态规划。如果只想看本题的答案,请直接翻到最后查看。动态规划算法似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的。...转载 2019-10-14 21:50:46 · 260 阅读 · 0 评论 -
求二叉树的深度和宽度
1 二叉树的深度题目:输入一个二叉树的根节点,求该树的深度。从根节点到叶子节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度包含的节点数为为树的深度,即二叉树节点的层数。二叉树的节点定义:假定二叉树的节点定义如下:struct BinaryTreeNode{ int m_value; BinaryTreeNode* m_pLeft; Binar...转载 2019-10-12 17:33:23 · 1059 阅读 · 0 评论 -
案例详解:动态规划入门(以爬楼梯为例)
https://www.php.cn/js-tutorial-407906.html概念动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划算法通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。基本思想要解决一个给定的问题,我们需要解决其不同部分(即解决...转载 2019-10-12 15:54:02 · 441 阅读 · 0 评论 -
leetcode No.3 无重复字符的最长子串
// No.3 无重复字符的最长子串// 给定一个字符串,找出不含有重复字符的最长子串的长度。// 示例:// 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。// 给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。// 给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"p转载 2018-12-10 23:23:28 · 244 阅读 · 0 评论 -
leetcode 2 两数相加
【LeetCode】2. Add Two Numbers 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) +...转载 2018-12-10 23:05:46 · 290 阅读 · 0 评论 -
121. 买卖股票的最佳时机 leetcode
/** * @param {number[]} prices * @return {number} */var maxProfit = function(prices) { // 优化头 while (prices.length>0) { let maxPrice = Math.max.apply(this,prices); if (m...原创 2018-12-21 08:26:18 · 352 阅读 · 0 评论 -
leetcode 96. 不同的二叉搜索树
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 ...转载 2018-12-20 23:41:51 · 215 阅读 · 0 评论 -
js 二分查找的实现
1.递归实现function binarySearch(data, dest, start, end){ var end = end || data.length - 1, start = start || 0, m = Math.floor((start + end) / 2); if(data[m] == dest){ re...转载 2018-12-15 12:33:20 · 420 阅读 · 0 评论 -
前端笔试&面试爬坑系列---算法
终于来了,算法相关的。 其实个人理解,前端岗位对于算法的要求与其他IT岗位相比,是低得多的。 但是小白我经历了如蚂蚁金服、网易这样的大厂教做人之后,还是觉得,对于一些基本算法、思想的掌握还是必须的。 然后,就把自己遇到的、学到的算法相关的再总结一下,方便自己随时备战面试。系列传送门:前端面试&笔试&错题指南(一)前端面试&笔试&错题指南(二)前端面试...转载 2018-08-17 15:20:01 · 5810 阅读 · 1 评论 -
图解排序算法(三)之堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,...转载 2018-12-03 07:29:37 · 234 阅读 · 0 评论 -
算法分析-堆排序 HeapSort 优先级队列
https://www.cnblogs.com/huenchao/p/5906193.html堆排序的是集合了插入排序的单数组操作,又有归并排序的时间复杂度,完美的结合了2者的优点。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki &...转载 2018-12-04 21:58:24 · 353 阅读 · 0 评论 -
leetcode 144. 二叉树的前序遍历
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @return {number[]} */var...原创 2018-12-17 13:17:21 · 245 阅读 · 0 评论