[leetCode]剑指 Offer 66. 构建乘积数组

在这里插入图片描述

解法

把A数组分为两部分:

  • A[0,...,i-1]
  • A[i+1,...,n-1]
    数组B可以用一个矩阵创建:
    在这里插入图片描述
    C[i]为矩阵第i行左半部分的乘积,D[i]为矩阵第i行右半部分的乘积。C[i]可以自上而下计算:C[i] = C[i-1] * A[i-1]D[i]可以自下而上计算:D[i] = D[i+1]*A[i+1],所以B[i] = C[i] * D[i]
class Solution {
    public int[] constructArr(int[] a) {
        if (a == null || a.length == 0) return new int[]{};
        int[] b = new int[a.length];
        b[0] = 1;
        for (int i = 1; i < a.length; i++) {
            b[i] = b[i-1] * a[i-1];
        }
        int temp = 1;
        for (int i = a.length - 2; i >= 0; i--) {
            temp *= a[i+1];
            b[i] *= temp;
        }
        return b;
    }
}
posted @ 2020-09-29 08:02  消灭猕猴桃  阅读(44)  评论(0)    收藏  举报
编辑推荐:
· C#性能优化:为何 x * Math.Sqrt(x) 远胜 Math.Pow(x, 1.5)
· 本可避免的P1事故:Nginx变更导致网关请求均响应400
· 还在手写JSON调教大模型?.NET 9有新玩法
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
阅读排行:
· AI 的力量,开发者的翅膀:欢迎使用字节旗下的 AI 原生开发工具 TRAE
· 「闲聊文」准大三的我,思前想后还是不搞java了
· C#性能优化:为何 x * Math.Sqrt(x) 远胜 Math.Pow(x, 1.5)
· 千万级的大表如何新增字段?
· 《HelloGitHub》第 112 期
历史上的今天:
2019-09-29 Opencv 图像数字化 Mat
2019-09-29 Opencv 图像数字化 ndarray
2019-09-29 Opencv矩阵运算 C++ API
2019-09-29 Opencv 矩阵运算python API
点击右上角即可分享
微信分享提示