算法复习三四题

1、找出数组种重复的数字

2、二维数组的查找:

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

 

5、替换空格:(Java基础课PPT8)

在JAVA 语言中字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。

 

 6、输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

 

8、

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

class Solution {

    private Map<Integer, Integer> indexMap;

    public TreeNode myBuildTree(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {

        if (preorder_left > preorder_right) {

            return null;

        }

        // 前序遍历中的第一个节点就是根节点

        int preorder_root = preorder_left;

        // 在中序遍历中定位根节点

        int inorder_root = indexMap.get(preorder[preorder_root]);

        

        // 先把根节点建立出来

        TreeNode root = new TreeNode(preorder[preorder_root]);

        // 得到左子树中的节点数目

        int size_left_subtree = inorder_root - inorder_left;

        // 递归地构造左子树,并连接到根节点

        // 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素

        root.left = myBuildTree(preorder, inorder, preorder_left + 1, preorder_left + size_left_subtree, inorder_left, inorder_root - 1);

        // 递归地构造右子树,并连接到根节点

        // 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素

        root.right = myBuildTree(preorder, inorder, preorder_left + size_left_subtree + 1, preorder_right, inorder_root + 1, inorder_right);

        return root;

    }

    public TreeNode buildTree(int[] preorder, int[] inorder) {

        int n = preorder.length;

        // 构造哈希映射,帮助我们快速定位根节点

        indexMap = new HashMap<Integer, Integer>();

        for (int i = 0; i < n; i++) {

            indexMap.put(inorder[i], i);

        }

        return myBuildTree(preorder, inorder, 0, n - 1, 0, n - 1);

    }

}

9、用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值