随笔分类 - algorithm
摘要:问题描述 输入一串父子节点对的数组,利用其构造一颗树 输入 const arr = [ {id:1,parentid:null}, {id:2,parentid:1}, {id:3,parentid:1}, {id:4,parentid:2}, {id:5,parentid:3} ] 解决思路 明确
阅读全文
摘要:/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val undefined ? 0 : val) * this.left = (left undefined
阅读全文
摘要:/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val undefined ? 0 : val) * this.next = (next undefined ? null
阅读全文
摘要:/** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1
阅读全文
摘要:深度优先搜索方法的实现:出现超时。 /** * @param {number} n * @return {number} */ var cnt=0; var deepSearch = function(curLevel,n){ if(curLevel >= n){ if(curLevel==n){
阅读全文
摘要:/** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { let dp =[]; let res = {}; let len = s.length; for(let i=0;i<len;i+
阅读全文
摘要:思路:目标字符串可以视为是由(左边的0)和(右边的1)组成的;维护由源字符串变为目标字符串的反转数量leftZero(左边变成0需要翻转的次数)和rightOne(右边变成1需要翻转的次数)。 则假设初始目标状态为‘0000...000’,则leftZero=n(n即为原始字符串中需要变成0 的1的
阅读全文
摘要:/** * @param {number} n * @return {string[]} */ var isValid = function(srcStr){ let help = []; for(let i = 0;i<srcStr.length;i++){ if(srcStr[i]=='('){
阅读全文
摘要:/** * @param {number[][]} intervals * @return {number[][]} */ var cmp = function(a,b){ if(a[0]==b[0]){ return a[1]-b[1]; }else{ return a[0]-b[0]; } };
阅读全文
摘要:/** * @param {string} s * @return {boolean} */ var isValid = function(s) { let tmpStack = []; for(let i = 0; i < s.length; i++){ let el = s[i]; if(el=
阅读全文
摘要:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 方法1:暴力解法 很显然会报 超过时间限制。 /** * @param {number[]} nums * @return {number} */ var maxSubArray = functi
阅读全文
摘要:/** * @param {number[]} nums * @return {number[]} */ function qsort(arr, left, right){ let i = left; let j = right; let base = arr[i]; if(left >= righ
阅读全文
摘要://JS版本的代码var buildTree = function(inorder, postorder) { let post_idx; const idx_map = new Map(); const helper = (in_left, in_right) => { // 如果这里没有节点构造
阅读全文
摘要:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) :
阅读全文
摘要:POJ1463是一个典型的树状DP题。 通常解法如下代码所示: 但此状态转移方程似乎并不正确。 反例如下: 输入 80:(3) 1 2 31:(1) 42:(1) 53:(1) 64:(0)5:(1) 76:(0)7:(0)程序输出为4,但根据题意显然可以找到最优解为3 。 似乎题干应当修改为,每个
阅读全文
摘要:o(n^2)解法就不赘述了,直接解释o(nlogn)解法 LIS最长递增子序列; 先明确一个结论:在长度最大为len的递增序列里若末尾元素越小,该递增序列越容易和后面的子序列构造出一个更长的递增子序列。也即认为,长度为len的递增子序列中末尾元素最小的那种最需要保留。我们不妨称这个目前找到序列为到目
阅读全文
摘要:一个简单的bfs题。 用结构体的目的在于保存bfs到达此处时走的步数。 不多言,上AC代码:
阅读全文
摘要:【本以为是个青铜,其实是个王者系列】 一开始只是简单的深搜,结果显然TLE 本题数据卡得非常紧。4种主要剪枝缺一不可。 此处粘上某博客解释,感觉很清晰。 分割线 思路启发: 越长的木棍对后面木棍的约束力越大,因此要把小木棍排序,按木棍长度从大到小搜索,这样就能在尽可能靠近根的地方剪枝。(剪枝一) 如
阅读全文
摘要:本题的题眼很明显,N (1 <= N <= 150), M (1 <= M <= 10),摆明了是想让你用状态压缩dp。 整个思路如下:由于要填2*3或者3*2的芯片,那么就要找一个策略来判断到底能不能填。 精华1在此: 找到的策略是,记格子(i,j)的状态有三种: 状态0代表(i,j)和(i-1,
阅读全文
摘要:直接上状态转移方程: 记dp[i][j]为第i轮比赛,第j个队伍获胜的概率。 那么初始状态下,dp[0][j]=1;//也就是第0轮比赛全都获胜 d[i][j]=sum(d[i-1][j]*d[i-1][k]*win[j][k])//也就是找到所有可能与j队在第i轮对决的k队,那么i队战胜k队的概率
阅读全文

浙公网安备 33010602011771号