[每日一道小算法(十八)][数组] 构建乘积数组 (剑指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]。不能使用除法。

题目解析

其实这道题的思路很好想,我们先把这个进行分解如下:
C[i] = A[0]*A[1]**A[i-1] = C[i-1]*A[i-1]。
D[i]=A[i+1]**A[n-1] = A[i+1] * D[i+1];
根据这个我们可以先分别求出来C[i]和D[i],在最后求解最后的B[i]。

代码样例

public class Solution{
	public int[] multiply(int[] A)
	{
		if(A.length<=0 || A == null)
		{
			return null;
		}
		int[] C = new int[A.length];
		C[0] = 1;
		for(int i=0;i<C.length;i++)
		{
			C[i] = C[i-1]*A[i-1];
		}
		int[] D = new int[A.length];
		D[D.length-1] = 1;
		for(int i=D.length-2;i>=0;i++)
		{
			D[i] = D[i+1] * A[i+1];
		}
		int[] result = new int[A.length];
		for(int i=0;i<result.length;i++)
		{
			result[i] = C[i] * D[i];
		}
		return result;
	}
}
发布了157 篇原创文章 · 获赞 34 · 访问量 4399

猜你喜欢

转载自blog.csdn.net/qq_39397165/article/details/104251204