輸入爲整數數組 arr,請你返回結果數組 ans,使得 ans[i] 爲 arr 中除了 arr[i] 之外的全部數的乘積。面試
先計算總乘積,再進行除法,時間複雜度 O(n)。算法
簡單的熱身題,算完總乘積後作除法就好了,作到bugfree便可。數組
www.jiuzhang.com/solution/re…bash
/**
* 本參考程序來自九章算法,由 @斌助教 提供。版權全部,轉發請註明出處。
* - 九章算法致力於幫助更多中國人找到好的工做,教師團隊均來自硅谷和國內的一線大公司在職工程師。
* - 現有的面試培訓課程包括:九章算法班,系統設計班,算法強化班,Java入門與基礎算法班,Android 項目實戰班,
* - Big Data 項目實戰班,算法面試高頻題班, 動態規劃專題班
* - 更多詳情請見官方網站:http://www.jiuzhang.com/?source=code
*/
public class Solution {
/**
* @param arr: The array you should handle
* @return: Return the product
*/
public int[] getProduct(int[] arr) {
// Write your code here
if(arr.length == 1) {
int[] ans = new int[1];
ans[0] = 0;
return ans;
}
int[] pre = new int[arr.length];
int[] suf = new int[arr.length];
int[] ans = new int [arr.length];
pre[0] = arr[0];
for(int i = 1; i < arr.length; i++) {
pre[i] = arr[i] * pre[i - 1];
}
suf[arr.length - 1] = arr[arr.length - 1];
for(int i = arr.length - 2; i >= 0; i--) {
suf[i] = suf[i + 1] * arr[i];
}
ans[0] = suf[1];
ans[arr.length - 1] = pre[arr.length - 2];
for(int i = 1; i <= arr.length - 2; i++) {
ans[i] = pre[i - 1] * suf[i + 1];
}
return ans;
}
}複製代碼