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 · 156 阅读 · 2 评论 -
位运算
思路:通过使用异或和同或来判断一些数字的次数等。异或:符号->‘^’1^0 = 10^1 = 10^0 = 01^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 · 2237 阅读 · 0 评论 -
BFS DFS
深度优先搜索(DFS)和广度优先搜索(BFS)DFS:深度优先搜索,优先深度来遍历,获取所需要的数值。针对图和树这样的数据结构。对每一个可能的分支路径深入到不能再深入为止,每个结点只能访问一次。BFS:广度优先搜索,盲目搜寻法,不考虑结点所在的可能位置,彻底搜索这张图,直到找到结点为止。当所有结点被访问,算法终止。题型一:图像渲染BFS:const floodFill = (image, sr, sc, newColor) => { const m = image.length;原创 2021-10-04 17:03:34 · 60 阅读 · 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 · 69 阅读 · 0 评论 -
栈
根据栈的性质:先进后出。我们可以用它来实现一些需要前后比较的情况。题型一:回文链表先把链表遍历一遍,把数据都压入栈。然后再把数据一个个出栈与链表从头开始比较。全部相同则说明是回文链表。...原创 2021-10-04 17:01:17 · 84 阅读 · 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 · 81 阅读 · 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 评论