《剑指offer》——构建乘积数组
来源:互联网 发布:认识数据库管理 编辑:程序博客网 时间:2024/06/12 01:20
T:
题目描述
给定一个数组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]。不能使用除法。
刚看到这一题目,直接想到的结题思路就是计算一个总乘积
这是最笨的一种方式,也是最容易实现的一种方式,但是看到题目描述中的最后一句,就断了这个念想。
怎么解决呢?我自己抠了会儿,没想出来,看到本题讨论版上别人的思路描述时,恍然大悟,原来如此~~~
上图:
code:
package niuke.sward2offer.multiplyArray; /** * T:构建乘积数组 * * 题目描述 * 给定一个数组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]。不能使用除法。 * * date: 2015.11.7 20:15 * @author SSS * */ public class Solution { /** * 解题思路自己还真没想出来,是看到讨论版上别人贴的解释,才恍然大悟。 * * 对于任意一个i,都有 * B[i] = A[0] * A[1] * ... * A[i-1] * A[i+1] * ... * A[n] * 那么,该等式右边,就可以分为2个部分,i之前的为一部分,i之后的为一部分 * 所以,有: * before[i] = A[0] * A[1] * ... * A[i-1] * after[i] = A[i+1] * ... * A[n] * 而: * B[i] = before[i] * after[i] * * before和after各成一个数组,也就是本题的解题思路。 * * @param A * @return */ public int[] multiply(int []A) { int []B = new int[A.length]; // 定义两个数组,分别存储元素i两边的乘积 int []beforeArray = new int[A.length]; int []afterArray = new int[A.length]; beforeArray[0] = 1; afterArray[A.length - 1] = 1; for (int i = 1; i < A.length; i++) { beforeArray[i] = A[i - 1] * beforeArray[i - 1]; afterArray[A.length - 1 - i] = A[A.length - i] * afterArray[A.length - i]; } for (int i = 0; i < A.length; i++) { B[i] = beforeArray[i] * afterArray[i]; } return B; } public static void main(String []args) { int []A = {3}; Solution solution = new Solution(); int []B = solution.multiply(A); for (int i = 0; i < B.length; i++) { System.out.println(B[i]); } } }
0 0
- 《剑指offer》——构建乘积数组
- 《剑指offer》——构建乘积数组
- 剑指offer——构建乘积数组
- 剑指offer——构建乘积数组
- 剑指offer—构建乘积数组
- 剑指offer—构建乘积数组
- 剑指Offer—51—构建乘积数组
- 剑指offer——51.构建乘积数组
- 剑指offer——面试题52:构建乘积数组
- 剑指offer--构建乘积数组
- 《剑指offer》构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer:构建乘积数组
- [剑指offer]构建乘积数组
- 剑指offer|构建乘积数组
- 《剑指offer》-构建乘积数组
- 【Leetcode】238-Product of Array Except Self【Java实现】【Medium】【two way traverse】
- 数据库范式——通俗易懂
- 相似数据检测算法(shingle,SimHash,Bloomfilter) 比较
- 20条Linux命令面试问答
- IT人生
- 《剑指offer》——构建乘积数组
- java提取字符串中的汉字
- Effective C++ 笔记 第二部分 构造/析构/赋值运算
- leetcode-Permutations
- Unity-APk 错误:Error building Player: Couldn't build player because of unsupported data on target plat
- android中handle的用法
- char数组与char指针的区别与联系
- iOS获取汉字首字母
- 做一个有价值的软件开发者