![](https://img-blog.csdnimg.cn/20210506205621663.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
算法
royalpioneer
这个作者很懒,什么都没留下…
展开
-
二叉树数学关系
1、完全二叉树 最后一个非叶子节点:n/2 向下取整 从0开始计数时, left = 2i+1 right = 2i+2 parent = (i-1)/2 向下取整 从1开始计数时, left = 2i right = 2i+1 parent = i/2 向下取整原创 2021-08-06 14:02:54 · 147 阅读 · 0 评论 -
正确处理一个矩阵
在处理一个矩阵 matrix[][] 时,虽然很清楚接下来该怎么做,但最后的结果往往会报数组越界的错误,致使编程5分钟,排错2小时,极其浪费时间。 究其原因,是没有理清矩阵与二维数组的对应关系,甚至与坐标轴混淆,且听我一点一点分析。 首先,我们需要创建一个二维数组 arr 来存储一个m*n的矩阵 matrix,有多种方法可以参考前文 Javascript的一些坑点,这里使用es6的简介写法 let arr = new Array(m).fill(0).map(v => new Array(n).fil原创 2021-07-11 11:55:04 · 102 阅读 · 0 评论 -
回溯思想解决排列组合子集问题
回溯思想 回溯的本质就是枚举每一个可能的解,枚举的过程与dfs的路线是一致的,因此最重要的一步就是将问题求解过程抽象出一颗决策树,并给出每个结点上所需要的状态,以及变化。 当一个问题只能通过枚举解决时,可用回溯。 当一个问题使用回溯解决时复杂度过高时,需要找到有效的剪枝方法,才可使用。 以下是在(有重复元素)排列组合子集问题上的应用 1、求全排列 LC 全排列 伪代码 1、定义回溯中的状态:结果数组res,可能的排列arr 2、定义搜索终止条件:arr长度等于nums的原始长度时,将arr加入res 3、原创 2021-07-04 15:39:47 · 113 阅读 · 0 评论 -
[链表] 142. 环形链表 II
https://leetcode-cn.com/problems/linked-list-cycle-ii/ 上面漏了两个字,“只要res与slow” --> “只要res与slow相遇” 代码如下: /** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode原创 2021-05-18 00:27:47 · 40 阅读 · 0 评论 -
[链表] 141. 环形链表
链表的题就是找数学关系 https://leetcode-cn.com/problems/linked-list-cycle/ 代码如下: /** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @return {boolean} */ va原创 2021-05-18 00:14:23 · 38 阅读 · 0 评论 -
第52场双周赛
5742. 将句子排序 /** * @param {string} s * @return {string} */ var sortSentence = function(s) { let arr = s.split(" "); let map = new Map(); for(let w of arr) { let [num] = w.split("").splice(-1,1); let tmp = w.split("");原创 2021-05-16 09:34:02 · 62 阅读 · 0 评论 -
[二分查找] 1095. 山脉数组中查找目标值
https://leetcode-cn.com/problems/find-in-mountain-array/ /** * // This is the MountainArray's API interface. * // You should not implement it, or speculate about its implementation * function MountainArray() { * @param {number} index * @retur原创 2021-05-15 22:27:33 · 40 阅读 · 0 评论 -
[DP] 零钱兑换
零钱兑换属于是完全背包问题 https://leetcode-cn.com/problems/coin-change/ 代码实现: /** * @param {number[]} coins * @param {number} amount * @return {number} */ var coinChange = function(coins, amount) { let dp = []; dp[0] = 0; for(let c of coins) dp[c] = 1原创 2021-05-15 22:22:44 · 49 阅读 · 0 评论 -
[回溯] 77、组合
https://leetcode-cn.com/problems/combinations/submissions/ 代码实现如下: /** * @param {number} n * @param {number} k * @return {number[][]} */ var combine = function(n, k) { let nums = []; for(let i=0;i<n;i++) nums.push(i+1); let res = [];原创 2021-05-14 12:15:33 · 38 阅读 · 0 评论 -
[回溯] 78、子集
https://leetcode-cn.com/problems/subsets/submissions/ 代码实现如下: /** * @param {number[]} nums * @return {number[][]} */ var subsets = function(nums) { let res = [[]]; dfs(nums, [], res, 0); return res; }; function dfs(nums, arr, res, cur) {原创 2021-05-14 12:01:18 · 41 阅读 · 0 评论 -
[回溯]46. 全排列
https://leetcode-cn.com/problems/permutations/ 伪代码 1、定义回溯中的状态:结果数组res,可能的排列arr 2、定义搜索终止条件:arr长度等于nums的原始长度时,将arr加入res 3、画出选择树 实现 /** * @param {number[]} nums * @return {number[][]} */ var permute = function(nums) { let res = []; dfs(nums, res,原创 2021-05-10 21:37:05 · 42 阅读 · 0 评论 -
尾递归优化
尾递归是递归的一种,特点是函数执行的最后一步是返回函数自身调用,如: function fn(a, b) { if(b === 1) return 1; return fn(a-1, b-1); } 这意味着在将下一个函数B加入递归调用栈前,可以将前一个函数A弹出销毁,因为B无需A的执行上下文环境。 拿求前N项和来说,N=3 非尾递归写法 function recursion(n) { if(n === 1) return n; return recursion(n-1) + n; }原创 2021-05-08 00:23:42 · 80 阅读 · 0 评论 -
[滑动窗口] 3. 无重复字符的最长子串
链接 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 滑动窗口 + 哈希集合 伪代码: (1)用left、right界定滑动窗口,使得滑动窗口中的序列片段不含有重复字符串 (2)由1得,初始状态为 left = right = 0,终止状态为 right = s.length-1 (3)结合题意,该滑窗移动方式是 一格一格移动 (4)可以使用数据结构 Set 来判断滑窗序列中是否有 重复字符原创 2021-05-07 19:37:44 · 54 阅读 · 0 评论 -
[板子] javascript
1、回溯+剪枝 当一个问题可以通过枚举解决时,可以采用 回溯+剪枝 解决。 剪枝的方式往往是利用已知的一些条件来提前终止程序对选择树的深搜 或者 记忆化等技巧。 回溯解决问题的关键是,找清楚所有需要的 状态,以及 这些状态在回溯前后的变化,最好提前将回溯选择树画出来并标注好状态变化,再下手。 function backTrack() { if (conditon) doSth(res); for (i of arr) { reduce(...arguments,res);原创 2021-05-06 20:46:39 · 99 阅读 · 0 评论