牛客剑指offer习题解答

题1 二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

// 运行时间:115ms
// 占用内存:7772k
function Find(target, array)
{
    // write code here
    let l1 = array.length
    let l2 = array[0].length
    let i = l1-1
    let j = 0
// js中换作while循环就无法通过了,是否说明js中for循环性能优于while循环?
// 后面用while重写通过,问题出在判断语句······(控制边界与控制结果)
    for(;i >= 0 && j <= (l2-1);){
        if(array[i][j] > target){
            i--
        }else if(array[i][j] < target){
            j++
        }else{
            return true
        }
    }
    return false
}

题2 替换空格

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

function replaceSpace(str)
{
    // 对js来说这道题很简单,使用正则表达式就可以做了
    // /\s/是空格,后面加个g,替换全局的空格
    return str.replace(/\s/g,"%20")
}

题3 从未到头打印链表

输入一个链表,从尾到头打印链表每个节点的值。

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function printListFromTailToHead(head)
{
  var res = [], pNode = head;
  // javascript数组操作,unshift插入数组第一位    
  while (pNode != null) {
        res.unshift(pNode.val);
        pNode = pNode.next;
    }
    return res;
}

题4 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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(pre, vin)
{    
    // 空值要注意
    if(pre.length === 0){
        return null
    }
    let left_pre,left_vin,right_pre,right_vin = []
    let head = new TreeNode(pre[0])
    let root = vin.indexOf(pre[0])
    left_pre = pre.slice(1, root+1)
    right_pre = pre.slice(root+1)
    left_vin = vin.slice(0,root)
    right_vin = vin.slice(root+1)
    // 递归:将根下面分为左右子树;然后求得左右子树的根节点
    head.left = reConstructBinaryTree(left_pre, left_vin)
    head.right = reConstructBinaryTree(right_pre, right_vin)
    return head
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 1,536评论 1 12
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,173评论 1 1
  • 剑指 offer 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成...
    faremax阅读 2,253评论 0 7
  • 人的一生有很多许许多多的故事,自己的别人的,不管是谁的故事都少不了英雄成长的几个环节:遇到波折,导师指点,战胜困难...
    Dflower阅读 291评论 0 0
  • 北方的故乡在老去 故乡的老榆树在老去 尘世中奔波的我,蓦然回首 母亲已渐行渐远 那些在耳畔的唠叨 不知还能叮咛多久...
    火把山阅读 531评论 11 23