![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Muzilh
加油鸭
展开
-
两个链表相交的一系列问题【js实现】
题目:在本题中,单链表可能有环也可能无环,给定两个单链表的头结点phead1 和phead2,这两个链表可能相交也可能不相交,请实现一个函数,如果两个链表相交,请返回相交的第一个节点,如果不相交,直接返回null要求:如果链表1的长度为n,链表2的长度为m,时间复杂度请达到O(N + M),额外空间复杂度达到O(1)这个问题可以拆分成三个子问题:一:如何判断一个链表是否有环,如...原创 2019-04-01 09:54:23 · 585 阅读 · 0 评论 -
常见的排序算法(冒泡,选择,快排,插入,希尔)
分类和性能1、稳定排序和非稳定排序简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4,a2,a3,...原创 2019-03-14 11:35:05 · 390 阅读 · 0 评论 -
【js版】 剑指offer【6】二叉树的下一个节点
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目分析: 思路:(1) 若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点 B )(2) 若该节点不存在右子树:这时分两种情况:2.1 该节点为父节点的左子节点,则下一个节点为其父节点(如图节点 D )2....原创 2018-10-24 11:28:33 · 322 阅读 · 0 评论 -
【js版】 剑指offer【5】重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回题目分析:首先,我们看看前序、中序、后序遍历的特性: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前...原创 2018-10-23 10:56:19 · 164 阅读 · 0 评论 -
【js版】 剑指offer【8】斐波那契数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39题目分析: 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这道题更应该用动态规划来做,动态规划的特点是:最优子结构、无后效性、子问题重叠 代码: function Fibonacci(n){ // wri...原创 2018-10-25 11:35:11 · 232 阅读 · 0 评论 -
【js版】 剑指offer【7】用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目分析: 入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。栈:先进后出队列:先进先出 代码: var intStack = [], o...原创 2018-10-25 10:06:18 · 116 阅读 · 0 评论 -
【js版】 剑指offer【4】从尾到头打印链表
题目描述:输入一个链表的头结点,从尾到头反过来打印出每个节点的值通常打印是一个只读操作,我们不希望打印时修改内容首先我们想到解决这个问题肯定是要遍历链表,遍历的顺序是从头到尾,可输出的顺序是从尾到头,也就是说,第一个遍历到的节点最后一个输出,最后遍历到的节点第一个输出,这就是典型的“后进先出”,我们可以利用栈实现这种顺序。每经过一个节点的时候,就把该节点放到一个栈中,当遍历完整个链表...原创 2018-10-09 16:37:03 · 343 阅读 · 0 评论 -
【js版】 剑指offer【3】替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。可以选择用正则function replaceSpace(str){ return str.replace(/\s/g,'%20')} 问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字...原创 2018-10-09 09:51:03 · 195 阅读 · 0 评论 -
【js版】 剑指offer【2】二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。利用二维数组由上到下,由左到右递增的规律,那么选取右上角或者左下角的元素array[row][col]与target进行比较,当target小于元素array[row][col]时,那么target必定在元...原创 2018-10-02 08:56:22 · 306 阅读 · 0 评论 -
【js版】 剑指offer【1】数组中重复的数字
题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 可以排序后,比较前后数字是否相同来做,不过这种方法时间复杂度不行,故舍去 由于数组里的所有数字都在0到n...原创 2018-10-01 21:21:54 · 409 阅读 · 0 评论 -
冒泡排序和快排
1.冒泡排序冒泡排序要点:1、 两层循环,外层循环控制走访数列重复进行的次数,内层循环进行数据的比较、交换,是数据“上浮”。2、 内层循环是相邻的数据进行比较。 <!--冒泡排序--> <script type="text/javascript"> var bubbleSort = function(arr){ for ...原创 2018-08-08 13:15:16 · 562 阅读 · 0 评论