leetcode
CelineCoding
Keep moving, stay kind.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode 739.每日温度 -- 单调栈
单调栈原创 2022-04-29 10:00:42 · 558 阅读 · 0 评论 -
二分查找 —— 面试最常考的手写算法之二
二分查找的前提是,数组必须是有序的。Array.sort()方法对数组元素进行排序,并返回数组。算法思路从数组的中间元素开始,如果中间元素正好是目标值,则结束搜索;如果目标值大于或小于中间元素,则在大于或小于中间元素的那一半数组中搜素;重复2,3步,若未找到,return -1。时间复杂度时间复杂度O(logN)每次使搜索范围缩小一半/劈成一半的问题,Time = O(logN)。CodingArray.prototype.binarySearch = function(item){原创 2022-02-27 01:11:30 · 433 阅读 · 0 评论 -
归并排序 —— 面试最常考的手写算法之三
归并排序的核心思想:分治。分治法是将原问题分解为几个规模较小但类似原问题的子问题,递归的求解这些子问题,然后合并这些子问题的解来建立原问题的解。 归并排序适合解决数据量较大的问题,相比其他排序,性能较好。算法思路分区:把数组劈成两半,再递归的对子数组进行“分”操作,直到分成一个个单独的数;合并:把两个数合并为有序数组,再对有序数组进行合并,直到全部子数组合并为一个数组;时间复杂度分区的时间复杂度 O(logN)合并的时间复杂度 O(n)时间复杂度O(n*logN)操作步骤新建一个空原创 2022-02-27 01:32:00 · 371 阅读 · 0 评论 -
快速排序 —— 面试最常考的手写算法之一
快速排序是面试环节中最常考的经典排序算法之一。面试官常要求面试者能够手写快速排序的代码。算法思路在数组中选择一个数字,即“基准”;把数组分为两部分,所有比基准小的放在基准前面,比基准大的放在基准后面;递归的对基准前后的子数列排序。关于基准的选取?可以固定位置选取,如arr[0]、随机选取、也可以三分取中。时间复杂度分区的时间复杂度 O(n)递归的时间复杂度 O(logN)所以时间复杂度为 O(n*logN)CodingArray.prototype.quickSort = fu原创 2022-02-27 00:58:03 · 821 阅读 · 0 评论 -
Leetcode105. 从前序和中序遍历构造二叉树 -- 递归
题目解题思路先序遍历顺序:根左右;中序遍历顺序:左根右;根据先序得到根节点位置;根据根节点位置 结合中序,得到左右子树;先序遍历、中序遍历中左右子树个数相同,可求出先序、中序中左右子树的下标;利用 map 求出根节点的位置,map始终存的是中序遍历元素(包括 leetcode106也是);画图!画图!画图!画图可清楚的看出来左右子树的下标。画图求左右子树下标根据左右子树在先序和中序遍历中的个数相同,得出:x - (preLeft + 1) = pIndex - 1 - inLe原创 2022-03-20 18:49:27 · 678 阅读 · 0 评论 -
剑指 offer35. 复杂链表的复制 -- JavaScript解法
题目要求思路分析用哈希表表示映射关系:键是原节点,值是复制的节点。第一次遍历链表,复制每个节点和 next 指针,并且保存原节点-〉复制节点的映射关系;第二次遍历,通过哈希表获得节点对应的复制节点,更新random指针;Code partvar copyRandomList = function(head) { let p = head; let map = new Map(); while(p){ map.set(p,new Node(p.val)) //用map来保存原创 2022-03-08 17:39:11 · 636 阅读 · 0 评论 -
Leetcode104. 二叉树的最大深度 -- JavaScript版
二叉树的概念:树中每个节点最多只能有两个子节点。树的一些常用操作,深度优先遍历DFS、广度(宽度)优先遍历BFS,二叉树的先、中、后序遍历。题目描述思路这道题要求找出数的最大深度,优先考虑使用DFS,DFS可以对根节点以及根结点的children进行深度查找,在查找的过程中,记录每个节点的层级,找到最大的即可。时间复杂度为 O(n),n为整棵树的节点树,因为每个节点都遍历到;空间复杂度为 O(n),n为最大深度。为什么空间复杂度是O(n),而不是O(1)呢?因为code中存在函数里面调用函原创 2022-03-03 14:52:48 · 865 阅读 · 0 评论 -
剑指 offer11. 旋转数组的最小数字 -- JavaScript解法
看到题目还在想,这题还用考吗?直接 array.sort().shift() 不就解决了。其实还要从时间复杂度的方向去考虑问题,另外,直接用api,确定面试官不会把你赶出去吗??其实这道题主要考察二分查找。用二分查找的方法去找到数组中的最小元素。题目描述解题思路解题思路可以参考二分查找,设置low,high表示要搜索的最大最小值的下标,可以先找到数组的中间元素,比较中间元素 mid 和数组末尾元素 high 的大小,根据比较的大小来判断区间值的位置,如果mid 大于 high,说明后部分存在最小值,原创 2022-02-27 22:30:22 · 514 阅读 · 0 评论
分享