他說他會給一個都是整數的陣列,然後我們要找到的就是除了i之外的所有元素乘積,他還給我們兩個條件:
我本來想說可以全部先乘起來,然後看i是第幾個就把他除掉的,但因為題目給的條件所以我們不能這樣做。
因為我對時間複雜度其實不知道是怎麼算的,所以我又覺得可以當輪到i的時候就先把i拿掉然後再一起乘,我就問了ChatGPT我這個想法是可行的嗎,它就跟我說這樣的話時間複雜度會變成O(n²),因為我要重新跑一個O(n)的迴圈。
後來Chat GPT提示我可以左右乘積分開算最後再一起乘起來,所以我就想設兩個變數分別存左邊的乘積和右邊的乘積,然後最後相乘並回傳answer。
class Solution {
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] left = new int[n];
int[] right = new int[n];
int[] answer = new int[n];
// 左邊乘積
left[0] = 1; // nums[0]左邊沒有數字 所以設1
for (int i = 1; i < n; i++) {
left[i] = left[i - 1] * nums[i - 1];
}
// 右邊乘積
right[n - 1] = 1;
for (int i = n - 2; i >= 0; i--) {
right[i] = right[i + 1] * nums[i + 1];
}
// 左右邊相乘
for (int i = 0; i < n; i++) {
answer[i] = left[i] * right[i];
}
return answer;
}
}
程式碼執行成功