剑指offer_数组---构建乘积数组

简介: 剑指offer_数组---构建乘积数组

题目描述

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]A[i-1]*A[i+1]…*A[n-1]。不能使用除法。

解题思路

B[i]的值可以看作下图的矩阵中每行的乘积。下三角用连乘可以很容求得,上三角,从下向上也是连乘。因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。

代码实现

/**
 * 
 */
package 数组;
/**
 * <p>
 * Title:乘积数组
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月15日 下午3:58:31
 */
public class Multiply {
    /**
     * void
     * 
     * @param args
     */
    public int[] multiply(int[] A) {
        int len = A.length;
        int[] B = new int[len];
        if (len != 0) {
            B[0] = 1;
            // 计算下三角连乘
            for (int i = 1; i < B.length; i++) {
                B[i] = B[i - 1] * A[i - 1];
            }
            // 计算下三角连乘
            int temp=1;
            for (int i = len-2; i >=0; i--) {
                temp*=A[i+1];
                B[i]*=temp;
            }
        }
        return B;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}


相关文章
|
easyexcel Java Maven
百万数据excel导出功能怎么做
百万数据excel导出功能怎么做
531 0
|
6月前
|
关系型数据库 MySQL 数据安全/隐私保护
大数据新视界--大数据大厂之MySQL 数据库课程设计:数据安全深度剖析与未来展望
本文深入探讨数据库课程设计 MySQL 的数据安全。以医疗、电商、企业案例,详述用户管理、数据加密、备份恢复及网络安全等措施,结合数据安全技术发展趋势,与《大数据新视界 -- 大数据大厂之 MySQL 数据库课程设计》紧密关联,为 MySQL 数据安全提供全面指南。
大数据新视界--大数据大厂之MySQL 数据库课程设计:数据安全深度剖析与未来展望
|
6月前
|
人工智能 分布式计算 大数据
大数据& AI 产品月刊【2025年3月】
大数据& AI 产品技术月刊【2025年3月】,涵盖3月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
存储 SQL 自然语言处理
LLM RAG系列
LLM RAG系列
368 1
|
消息中间件 NoSQL 中间件
Linux-中间件安装指南
Linux-中间件安装指南
308 0
|
PHP 开发者
深入理解PHP7的返回类型声明
【5月更文挑战第27天】 在PHP7中,引入了一项新的语言特性——返回类型声明。这一功能允许开发者在函数定义时明确指定函数应返回的数据类型,从而提升代码的可读性和健壮性。本文将深入探讨返回类型声明的概念、用法以及其对现有PHP项目的影响,旨在为PHP开发者提供一份详细的技术解析和实践指南。
|
监控 Java
记录页面修改差异(java注解实现)
记录页面修改差异(java注解实现)
156 0
|
存储 前端开发 开发工具
前端常用的git操作
【8月更文挑战第24天】前端常用的git操作
119 1
|
JavaScript 前端开发 中间件
异步编程中使用 async/await 是否必须包含 try 和 catch 语句以实现错误处理?
异步编程中使用 async/await 是否必须包含 try 和 catch 语句以实现错误处理?
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】机器学习中的模型融合技术
【4月更文挑战第30天】模型融合,即集成学习,通过结合多个模型提升预测性能。常见方法包括:Bagging(如Random Forest)、Boosting(如AdaBoost、XGBoost)和Stacking。Python中可使用`scikit-learn`实现,例如BaggingClassifier示例。模型融合是机器学习中的强大工具,能提高整体性能并适应复杂问题。
332 0