返回介绍

51.构建乘积数组

发布于 2023-08-30 21:54:39 字数 872 浏览 0 评论 0 收藏 0

给定一个数组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[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)

思路:假设:

left[i] = A[0]*...*A[i-1]
right[i] = A[i+1]*...*A[n-1]

所以:

B[i] = left[i] * right[i]

可知:

left[i+1] = left[i] * A[i]
right[i] = right[i+1] * A[i+1]

B[0]没有左,B[n-1]没有右。

import java.util.Arrays;
public class Solution {
  public int[] multiply(int[] A) {
    int n = A.length;
    int[] B = new int[n];
    if(n == 0) return B;
    Arrays.fill(B,1);
    for(int i = 1; i < n; i++){
      B[i] = B[i-1]*A[i-1];
    }
    int temp = 1;
    for(int i = n-2; i >= 0; i--){
      temp *= A[i+1];
      B[i] *= temp;
    }
    return B;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文