剑指offer
Muzilh
加油鸭
展开
-
【js版】 剑指offer【1】数组中重复的数字
题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 可以排序后,比较前后数字是否相同来做,不过这种方法时间复杂度不行,故舍去 由于数组里的所有数字都在0到n...原创 2018-10-01 21:21:54 · 434 阅读 · 0 评论 -
【js版】 剑指offer【15】从上往下打印二叉树
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目分析:使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来代码:function PrintFromTopToBottom(root){ // write code here v...原创 2019-03-08 12:09:58 · 197 阅读 · 0 评论 -
【js版】 剑指offer【14】复杂链表的复制
题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目分析:代码:function Clone(pHead) { // write code here...原创 2019-03-06 22:11:58 · 190 阅读 · 0 评论 -
【js版】 剑指offer【13】删除链表中重复的节点
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5这个不写题目分析了,直接上代码吧代码:function deleteDuplication(pHead) { ...原创 2019-03-06 16:54:44 · 408 阅读 · 1 评论 -
【js版】 剑指offer【12】两个链表的第一个公共节点
题目描述:输入两个链表,找出它们的第一个公共结点,链表的定义如下:function ListNode(x){ this.val = x; this.next = null;}题目分析:从链表的定义可以看出,这两个链表是单向链表。如果两个单项链表有公共节点,那么这两个链表从某一节点开始,他们的next都指向同一个节点。但由于是单向链表的节点,每一个节点都只...原创 2019-03-06 15:09:12 · 395 阅读 · 0 评论 -
【js版】 剑指offer【11】合并两个排序的列表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目分析:链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点是合并后链表的头结点。 剩余的结点中,链表2的头结点的值小于链表1的头结点的值,因此链表2的头结点是剩 余结点的头结点,把这个结点和之前已经合并好的链表的尾结点链接起来。代...原创 2019-03-06 10:06:36 · 223 阅读 · 0 评论 -
【js版】 剑指offer【10】输入一个链表,输出该链表中倒数第k个结点。
题目描述:输入一个链表,反转链表后,输出新链表的表头。题目分析:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。。代码: /*function ListNode(x){ this.val = x; ...原创 2019-03-05 18:54:19 · 402 阅读 · 0 评论 -
【js版】 剑指offer【9】翻转链表
题目描述:输入一个链表,反转链表后,输出新链表的表头。题目分析:1->2->3->4->5,遍历链表,把1的next置为null,2的next置为1,以此类推,5的next置为4。得到反转链表。需要考虑链表只有1个元素的情况。图中有具体的每步迭代的思路,最后输出pre而不是pHead是因为最后一次迭代后pHead已经指向null了,而pre是完整的反向链...原创 2019-03-05 16:45:46 · 140 阅读 · 0 评论 -
【js版】 剑指offer【6】二叉树的下一个节点
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目分析: 思路:(1) 若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点 B )(2) 若该节点不存在右子树:这时分两种情况:2.1 该节点为父节点的左子节点,则下一个节点为其父节点(如图节点 D )2....原创 2018-10-24 11:28:33 · 362 阅读 · 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 · 214 阅读 · 0 评论 -
【js版】 剑指offer【8】斐波那契数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39题目分析: 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这道题更应该用动态规划来做,动态规划的特点是:最优子结构、无后效性、子问题重叠 代码: function Fibonacci(n){ // wri...原创 2018-10-25 11:35:11 · 285 阅读 · 0 评论 -
【js版】 剑指offer【7】用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目分析: 入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。栈:先进后出队列:先进先出 代码: var intStack = [], o...原创 2018-10-25 10:06:18 · 127 阅读 · 0 评论 -
【js版】 剑指offer【4】从尾到头打印链表
题目描述:输入一个链表的头结点,从尾到头反过来打印出每个节点的值通常打印是一个只读操作,我们不希望打印时修改内容首先我们想到解决这个问题肯定是要遍历链表,遍历的顺序是从头到尾,可输出的顺序是从尾到头,也就是说,第一个遍历到的节点最后一个输出,最后遍历到的节点第一个输出,这就是典型的“后进先出”,我们可以利用栈实现这种顺序。每经过一个节点的时候,就把该节点放到一个栈中,当遍历完整个链表...原创 2018-10-09 16:37:03 · 383 阅读 · 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 · 246 阅读 · 0 评论 -
【js版】 剑指offer【2】二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。利用二维数组由上到下,由左到右递增的规律,那么选取右上角或者左下角的元素array[row][col]与target进行比较,当target小于元素array[row][col]时,那么target必定在元...原创 2018-10-02 08:56:22 · 345 阅读 · 0 评论 -
【js版】 剑指offer【16】二叉树的镜像
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5题目...原创 2019-03-08 12:13:12 · 283 阅读 · 0 评论