算法小知识-----04.14-----梅开二度

103 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

今天的每日一题略为简单吗,所以决定做两道题

最富有客户的资产量

该题出自力扣的1672题 —— 最富有客户的资产量【简单题】

审题

给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​​​​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。
客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。

  • 依据题意,找出二维数组里面每一个数组的最大总和,简单明了
  • 定义一个变量,初始值为0
  • 遍历这个二维数组,对于每一个数组的总和进行对比,最终返回这个最大值变量
  • 时间复杂度为O(n^2),因为用了双重for循环
  • 空间复杂度为O(1)

编码

class Solution {
    public int maximumWealth(int[][] accounts) {
        int max = 0;
        for (int i = 0; i < accounts.length; i++) {
            int indexMax = 0;
            for (int j = 0;j < accounts[0].length;j++){
                indexMax +=accounts[i][j];
            }
            max = Math.max(max,indexMax);
            indexMax = 0;
        }
        return max;
    }
}

image.png

从前序与中序遍历序列构造二叉树

该题出自力扣的105题 —— 从前序与中序遍历序列构造二叉树【中等题】,这题是今天的第二道题,虽然做出来了,但是对于回溯的理解依然没有那种得心应手的感觉

审题

image.png

  • 依据题意,就是给出一个二叉树的前序遍历(int数组)和中序遍历(int数组),返回一个层序遍历的数组
  • 首先需要知道,前序遍历 —— 中左右;中序遍历 —— 左中右;
    • 根据以上两个规则,首先就可以确定根节点,就是前序遍历数组的第一个数
    • 在中序遍历的数组中找到根节点所在的位置,则根节点之前的为左子树,根节点之后的为右子树
    • 根据上述的左右子树数量,可以在前序遍历的数组中确定左右子树的相对位置
    • 递归以上的步骤
  • 利用代码实现上述的步骤即可、

编码

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        //preorder 为前序(中左右) inorder为中序(左中右)
        return buildTreeHelper(preorder,0,preorder.length,inorder,0,inorder.length);
    }

    public TreeNode buildTreeHelper(int[] preorder,int startP,int endP,int[] inorder,int startO,int endO){
        //preorder 为空,直接翻null
        if (startP == endP)return null;
        int preRoot = preorder[startP];
        TreeNode root = new TreeNode(preRoot);
        int inRoot = 0;
        for (int i = startO;i<endO;i++){
            if (inorder[i] == preRoot){
                inRoot = i;
                break;
            }
        }
        int leftNum = inRoot - startO;
        root.left = buildTreeHelper(preorder,startP+1,startP + leftNum +1,inorder,startO,inRoot);
        root.right = buildTreeHelper(preorder,startP+leftNum+1,endP,inorder,inRoot+1,endO);
        return root;
    }

image.png