您的位置:首页 > 其它

[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, 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