js_剑指Offer刷题
以多种方法记录剑指Offer刷题全过程
越来越棒鸭
这个作者很懒,什么都没留下…
展开
-
JZ1 二维数组的查找——二分法拓展到二维
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题解以下来自牛客官方题解:回想一下一维有序数组查找某个值二分的过程,如下图所示:假设目标tar在arr[1]处,那么我们的二分过程就是:1)设初始值:定义一个二分的开始下标为l,结束下标为r,如图所示:2)二分一半,中间位置为 mid = l + ((r - l) >> 1), va原创 2020-08-08 11:50:59 · 630 阅读 · 0 评论 -
js——排序算法
文章目录1. 斐波那契数列2.冒泡排序3.快速排序4.插入排序1. 斐波那契数列斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)function fib(n){ if(n==1||n==2){ return 1; } return fbnq(n-1)+fbnq(n-2...原创 2020-04-24 17:20:36 · 100 阅读 · 0 评论 -
JZ 二叉树有关
文章目录1. 对称二叉树2. 搜索二叉树3. 遍历二叉树4. 重建二叉树5. 打印二叉树6. 序列化二叉树1. 对称二叉树请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/* function TreeNode(x) { this.val = x; this.left = null; this.right ...原创 2020-04-27 21:32:15 · 393 阅读 · 0 评论 -
JZ 链表有关
文章目录1. JZ 3 从尾到头打印链表2. JZ 14 链表中倒数第k个结点3. JZ 15 反转链表4. JZ 16 合并两个排序的列表5. JZ 25 复杂链表的复制6. JZ 26 二叉搜索树与双向链表7. JZ 36 两个链表的第一个公共结点8. JZ 55 链表中环的入口结点9. JZ 56 删除链表中重复的结点1. JZ 3 从尾到头打印链表/*function ListNode(x){ this.val = x; this.next = null;}*///list原创 2020-06-17 18:23:29 · 396 阅读 · 0 评论 -
JZ62 二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。题解二叉搜索树:左子树的值 < 根结点的值 < 右子树的值二叉搜索树的中序遍历正好是从小到大的有序列表代码:/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} *///二叉搜索树:左子节点值<根节点值原创 2020-06-16 21:46:30 · 128 阅读 · 0 评论 -
JZ63 数据流中的中位数——大顶堆、小顶堆
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。题解此题应该着重于考察大顶堆和小顶堆。之所以提供两个函数,就是想让大家动态的获取比如插入之后,通过getmedian能立马获得中位数,需要动态的更新具体思想可看:https://leetcode-cn.com/原创 2020-06-15 18:51:20 · 177 阅读 · 0 评论 -
JZ66 机器人的运动范围——DFS
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?题解此题用DFS(深度优先搜索)可以求解。下面引用及模板参考:DFS(深度优先搜索算法)深度优先搜索算法(Depth First Search,简称原创 2020-06-12 15:39:16 · 132 阅读 · 0 评论 -
JZ67 剪绳子——递归、动态规划
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。题解1. 递归分析:定义f(n)f(n)f(n)为我们所需要的长度为n的剪成m段的最大乘积。对于每一段来说,可以选择不剪,即f(n)f(n)f(n),也可以选择剪,剪又可以分为f(i)∗f(n原创 2020-06-11 11:21:47 · 248 阅读 · 0 评论