zoukankan      html  css  js  c++  java
  • 51构建乘积数组

    题目描述

    给定一个数组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]。不能使用除法。


    思路1:
    暴力

     1 import java.util.ArrayList;
     2 public class Solution {
     3     public int[] multiply(int[] A) {
     4         int[] B = new int[A.length];
     5         for(int i = 0;i<A.length;i++){
     6             B[i] = 1;
     7             for(int j = 0;j<A.length;j++)
     8                 if(j!=i)
     9                     B[i]*=A[j];
    10         }
    11         return B;
    12     }
    13 }

    思路2:



    Bi等于上图矩阵每一行的乘积
    上图矩阵可以分为2部分,对角线左边与对角线右边。
    对角线2边分别计算,然后将2边的结果乘起来,就是最后的结果。


     1 import java.util.ArrayList;
     2 public class Solution {
     3     public int[] multiply(int[] A) {
     4         int[] B = new int[A.length];
     5         for(int i = 1;i<A.length;i++){
     6             B[0] = 1;
     7             B[i] =B[i-1]*A[i-1];
     8         }
     9         int temp=1;
    10         for(int j = A.length-2;j>=0;j--){
    11            temp *= A[j+1];
    12            B[j]=B[j]*temp;
    13         }
    14         return B;
    15     }
    16 }
  • 相关阅读:
    vfork与fork的区别
    常见的六种设计模式以及应用场景
    Java中常见的集合类比较
    排序——总结
    排序——交换排序
    排序——选择排序
    排序——归并排序
    排序——基数排序
    排序——插入排序
    设计模式
  • 原文地址:https://www.cnblogs.com/zle1992/p/8214674.html
Copyright © 2011-2022 走看看