数据结构与算法
文章平均质量分 60
Ying_Mr
自由而无用
展开
-
Leetcode刷题——树(9/16)
开始刷题 递归 104. 二叉树的最大深度 深度后序遍历即可 var maxDepth = function (root) { if (!root) return 0; let left = maxDepth(root.left); let right = maxDepth(root.right); return Math.max(left, right) + 1; }; 110. 平衡二叉树 let result = true; var isBalanced = fun原创 2021-05-08 21:39:48 · 98 阅读 · 0 评论 -
Leetcode刷题——链表(8/16)
开始刷题 160. 相交链表 双指针法,遍历完一遍后,指向另一个链表的头。a+b=b+a,有交点就一定会在交点处相遇,分两种情况,链表长度相等与不相等分析。 var getIntersectionNode = function (headA, headB) { let pA = headA, pB = headB; while (pA !== pB) { pA = pA === null ? headB : pA.next; pB = pB === null原创 2021-05-08 19:44:29 · 75 阅读 · 0 评论 -
Leetcode刷题——二分查找(4/16)
开始刷题 69. Sqrt(x) (Easy) 744. Find Smallest Letter Greater Than Target (Easy) 540. Single Element in a Sorted Array (Medium) 278. First Bad Version (Easy) 153. Find Minimum in Rotated Sorted Array (Medium) 34. Find First and Last Position of Element原创 2021-05-06 20:09:05 · 69 阅读 · 0 评论 -
Leetcode刷题——贪心思想(3/16)
什么是贪心思想 是一种总是选择当前最优的,以期望达到整体最优的方法贪心法一般用于求解最优化问题。采用贪心法求最优化问题的算法,一般都包含一系列步骤,每一步都有一组选择,每次都选择当前最优的选择,希望通过局部最优的选择达到全局最优的选择。贪心法不一定总能产生最优解,可能产生近似解甚至完全不正确的答案,故想使用贪心法,最好是能够能够符合贪心法产生优化解的条件。它的做法大致可以分为以下三步: a、确定贪心策略 b、根据贪心策略,一步一步得到局部最优解 c、将局部最优解合并起来就得到全局最优解 开始刷题 455原创 2021-05-05 23:58:29 · 234 阅读 · 0 评论 -
Leetcode刷题——排序(2/16)
快速选择 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现(略有区别)。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。 在每执行一次的时候,比较基准值位置是否在 n-k 位置上,如果小于 n-k ,则第 k 个最大值在基准值的右边,我们只需递归基准值右边的子序列即可;如果大于 n-k ,则第 k 个最大值在基准值的做边,我们只需递归基准值左边的子序列即可;如果等于 n-k ,则第 k 个最大值就是基准值 堆 用于求解 Top原创 2021-04-27 09:15:31 · 78 阅读 · 0 评论 -
Leetcode刷题——双指针(1/16)
什么是双指针 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。 对撞指针是指在有序数组中,将指向最左侧的索引定义为左指针(left),最右侧的定义为右指针(right),然后从两头向中间进行数组遍历。 对撞数组适用于有序数组,也就是说当你遇到题目给定有序数组时,应该第一时间想到用对撞指针解题。 快慢指针也是双指针,但是两个指针从同一侧开始遍历数组,将这两个指针分别定义为快指针(fast)和慢指针原创 2021-04-26 15:27:58 · 172 阅读 · 0 评论 -
搜索算法
搜索算法 顺序搜索 又称线性搜索,一个个顺序查找,找到了返回索引,否则返回未找到信息。是最低效的查找方式。 const DOES_NOT_EXIST =-1; function sequerialSearch(arr, target) { for (let i = 0; i < arr.length; i++) { if (target === arr[i]) { return i } } return DOES_NOT_原创 2021-04-25 11:46:00 · 69 阅读 · 0 评论 -
排序算法
排序算法 1.冒泡排序 比较所有相邻的两个项,如果第一个比第二个大,则交换。 function bubbleSort(arr) { const { length } = arr; for (let i = 0; i < length - 1; i++) { for (let j = 0; j < length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { let原创 2021-04-23 22:02:41 · 100 阅读 · 0 评论