[Lintcode]Product of Array Exclude Itself
2016-02-24 17:58
351 查看
Given an integers array A.
Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WITHOUT divide operation.
Example
For A =
分成两个数组分别储存(1, A[0], A[0] * A[1], .....) (.....A[n - 2] * A[n - 1], A[n - 1], 1), 最后将两个数组对应位相乘。
Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WITHOUT divide operation.
Example
For A =
[1, 2, 3], return
[6, 3, 2].
分成两个数组分别储存(1, A[0], A[0] * A[1], .....) (.....A[n - 2] * A[n - 1], A[n - 1], 1), 最后将两个数组对应位相乘。
public class Solution { /** * @param A: Given an integers array A * @return: A Long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1] */ public ArrayList<Long> productExcludeItself(ArrayList<Integer> A) { List<Long> left = new ArrayList<Long>(); List<Long> right = new ArrayList<Long>(); ArrayList<Long> B = new ArrayList<Long>(); for(int i = 0; i < A.size(); i++) { if(i == 0) { left.add(Long.valueOf(1)); right.add(Long.valueOf(1)); } else { Long tmp = Long.valueOf(left.get(left.size() - 1)); left.add(A.get(i - 1) * tmp); tmp = right.get(0); right.add(0, tmp * A.get(A.size() - 1 - i + 1)); } } for(int i = 0; i < A.size(); i++) { Long tmp = Long.valueOf(left.get(i) * right.get(i)); B.add(tmp); } return B; } }
相关文章推荐
- LintCode Majority Number iii
- LintCode-最大数
- Subtree
- LintCode --number-of-airplanes-in-the-sky(数飞机)
- LintCode --invert-binary-tree(翻转二叉树)
- LintCode --find-the-missing-number(寻找缺失的数)
- LintCode--best-time-to-buy-and-sell-stock(买卖股票的最佳时机)
- LintCode--best-time-to-buy-and-sell-stock-ii(买卖股票的最佳时机 II)
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- LintCode 翻转二叉树
- LintCode 寻找缺失的数
- LintCode 更新二进制位
- Lintcode 二叉树的后序遍历
- Lintcode 二叉树中序遍历
- Lintcode 二叉树前序遍历
- Lintcode 尾部零的个数
- Lintcode 比较字符串
- Lintcode 主元素
- Lintcode解题笔记 - 岛屿的个数
- LintCode -合并两个排序链表