LeetCode学习
Kousaka-Mayuri
学
展开
-
动态规划
题型一: 打家劫舍 思路: 递归: 当我们计算如果有n家可以偷的房屋时,我们从最后一家开始看起,偷最后一家后的最大金额考虑是: 1.我们偷第n家,这时第n-1家不可以偷,所以最大金额是前n-2家最大的值加上第n家的金额。 2.我们不偷第n家,这时第n-1家可以偷,所以最大金额就是前n-1家能偷的最大值。 边界条件是: 1.一家都没有,返回0。 2.有一家能偷,返回此家能偷的钱。 3.有两家能偷,返回这两家最大的钱。 代码: var rob = function(nums) { function c原创 2021-10-04 17:07:59 · 157 阅读 · 2 评论 -
位运算
思路:通过使用异或和同或来判断一些数字的次数等。 异或:符号->‘^’ 1^0 = 1 0^1 = 1 0^0 = 0 1^1 = 0 题型一: 只出现一次的数字 思路:遍历一遍,用一个变量来存储每个成员互相进行异或的结果。出现偶数次的会被置零,最后的结果是只出现了一次的数据。 var out = 0; for(let i = 0;i<nums.length;i++){ out ^= nums[i]; } return out; ...原创 2021-10-04 17:05:54 · 74 阅读 · 0 评论 -
迭代
概念:迭代是一种重复反馈的方法,为了逼近结果而不断重复循环,每次迭代的结果会作为下一次迭代的初始值进行计算。 题型一: 合并两个有序链表 思路:先设定一个哨兵节点,通过将两个链表的结点一一比较,较小值作为该结点的下一位,重复该过程直到两个链表中出现一个空链表,再将其中一个链表的数值都挂在哨兵节点的后面。 var mergeTwoLists = function(l1, l2) { const prehead = new ListNode(-1); let prev = prehead;原创 2021-10-04 17:04:59 · 2239 阅读 · 0 评论 -
BFS DFS
深度优先搜索(DFS)和广度优先搜索(BFS) DFS:深度优先搜索,优先深度来遍历,获取所需要的数值。针对图和树这样的数据结构。对每一个可能的分支路径深入到不能再深入为止,每个结点只能访问一次。 BFS:广度优先搜索,盲目搜寻法,不考虑结点所在的可能位置,彻底搜索这张图,直到找到结点为止。当所有结点被访问,算法终止。 题型一: 图像渲染 BFS: const floodFill = (image, sr, sc, newColor) => { const m = image.length;原创 2021-10-04 17:03:34 · 62 阅读 · 0 评论 -
二叉树
题型一: 合并二叉树 思路:同时遍历两棵树相同的结点,即使其中一棵树该结点为null,将他们相加后覆盖某棵树的该结点。利用递归表达更清楚。涉及到BFS和DFS算法。 var mergeTrees = function(root1, root2) { if(root1 == null)return root2; if(root2 == null)return root1; root1.val += root2.val; root1.left = mergeTrees原创 2021-10-04 17:02:19 · 71 阅读 · 0 评论 -
栈
根据栈的性质:先进后出。我们可以用它来实现一些需要前后比较的情况。 题型一: 回文链表 先把链表遍历一遍,把数据都压入栈。然后再把数据一个个出栈与链表从头开始比较。全部相同则说明是回文链表。 ...原创 2021-10-04 17:01:17 · 85 阅读 · 0 评论 -
双指针
题型一: 有序数组的平方: 思路:找到非负数与负数的临界区,平方后前半部分为降序,后半部分为升序。从分界区左右各放置一个指针,向左与向右遍历,依次比较放入新的数组中。某一部分遍历完则将另一部分剩余遍历后放入数组中。 var mid; for(let i = 0;i<nums.length;i++){ if(nums[i]<=0) mid = i; else break; }//找出临界值 var left = mid; var right = mid+1; var num原创 2021-09-22 09:40:03 · 82 阅读 · 0 评论 -
二分查找
从有序的数组中通过中间值来寻找最佳匹配。 例如:nums[2,4,5,6,7]中target为2,则先比较nums[(0+4)/2]与2的大小,若2小于该值则选择其值左边剩下的数组来筛选,大于则右边。 大致思路: 从数组中找出一个: let left = 1; let right = n; while(left < right){ const mid = Math.floor(left + (right - left)/2); if(nums[mid]>=target) right =原创 2021-09-22 09:39:03 · 89 阅读 · 0 评论