FCC上的javascript基础算法题 前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论.基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正则表达式来匹配,则一行代码就可以完成需求.欢迎大家提出不同解法.末尾有FCC的链接,感兴趣的同学可以去做一做. 1.翻转字符串 function reverseString(str) { var arr=str.split(""); str=arr.reverse().join("…
在上一篇文章 小小c#算法题 - 10 - 求树的深度中,用到了树的数据结构,树型结构是一类重要的非线性数据结构,树是以分支关系定义的层次结构,是n(n>=0)个结点的有限集.但在那篇文章中,只是简单地把结点组合到了一块. 这次,我们来简单定义一棵二叉树的数据结构,并实现其先序(根)遍历.中序(根)遍历.后序(根)遍历算法. 下面先来看一下先序遍历,中序遍历,后序遍历的定义: 先序遍历: 若二叉树为空,则空操作,否则 (1)访问根结点: (2)先序遍历左子树: (3)先序遍历右子树: 中序遍历:…
重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 实现代码 /* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function reConstructBinaryTree(pr…
问题描述 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 解题思路 二叉树的一些算法题都可以使用递归来解决,这道题也不例外. 首先对空指针应该直接返回. 然后递归将左子树展开为链表 1 / \ 2 5 \ \ 3 6 \ 4 再递归将右子树展开为链表 1 / \ 2 5 \ \ 3 6 \ 4 再然后暂存右子树,将左子树链接到根节点右孩子上,切记左孩子要置空! 1 5 \ \ 2 6 \…
上周通过一位小伙伴,加入了一个氛围很好的小群,人不多,但是大家保持着对知识的渴望,让我很感动. 我自己也有一个群,人数也不多,但是能真正互动起来一起学习,一起进步的,还是太少.所以,现在也在学习如何让自己成为更好的群主,带动群活跃,带动一个社群活跃,带动小伙伴们一起进步,是我的愿景.当然,也不否认现在很多群友正在朝着积极向上的方向走着,我要做的,也是时刻保持对知识的渴望,做到"持续学习". 谁让咱是一名优秀的程序员呢.上周日也学习了一遍递归,还通过一个二叉树的例子来简单介绍了下.我之前…
Q1.翻转二叉树(easy) 如题所示 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/invert-binary-tree 这道题目起源于一个非常搞笑的事件:据说大名鼎鼎的Mac软件包管理工具Homebrew的作者,因为做不出这道在leetcode上难度为easy的题,被谷歌公司拒了... 谷歌:我们90%的工程…
/* 现在有一个问题,已知二叉树的前序遍历和中序遍历: PreOrder:GDAFEMHZ InOrder:ADEFGHMZ 我们如何还原这颗二叉树,并求出他的后序遍历 我们基于一个事实:中序遍历一定是 { 左子树中的节点集合 },root,{ 右子树中的节点集合 },前序遍历的作用就是找到每颗子树的root位置. 算法1 输入:前序遍历,中序遍历 1.寻找树的root,前序遍历的第一节点G就是root. 2.观察前序遍历GDAFEMHZ,知道了G是root,剩下的节点必然在root的左或右子树…
问题描述 Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 和Balanced Binary Tree那题很像.定义T(p)为以p为根的树,T(p) = T(q)需要符合两个条件:…
题目:给定一个一维数组,如[1,2,4,4,3,5],找出数组中第k大的数字出现多少次. 例如:第2大的数是4,出现2次,最后输出 4,2 function getNum(arr, k){ // 数组排序->从大到小 arr.sort((a, b)=>{ return b-a; }); let uniqarr = Array.from(new Set(arr)); // 数组去重 let tar = uniqarr[k-1]; // 找到目标元素 let index = arr.indexOf…
用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不用,node也能很好帮助我们完成!且笔试都支持用nodeJs,实际上就是用JS编程,只是用到了node的一些输入输出流方法. 我们看看最简单的使用模板:(转载) var readline = require('readline'); rl = readline.createInterface({ i…