美文网首页
牛客剑指offer习题解答

牛客剑指offer习题解答

作者: xunuo0x | 来源:发表于2018-02-02 15:50 被阅读26次

    题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习题解答

          本文链接:https://www.haomeiwen.com/subject/ifdezxtx.html