企業(yè)門(mén)戶網(wǎng)站建設(shè)渠道服裝市場(chǎng)調(diào)研報(bào)告范文
題目
給你一個(gè)整數(shù)數(shù)組 nums,返回 數(shù)組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。
題目數(shù)據(jù) 保證 數(shù)組 nums之中任意元素的全部前綴元素和后綴的乘積都在 ?32 位 整數(shù)范圍內(nèi)。
請(qǐng)不要使用除法,且在 O(n) 時(shí)間復(fù)雜度內(nèi)完成此題。
解題思路
- 最簡(jiǎn)單的是把所有元素相乘,出去當(dāng)前的元素值;
- 可以理解成當(dāng)前元素把數(shù)組分割成左右兩部分,而乘積可以通過(guò)左側(cè)數(shù)組值乘以右側(cè)數(shù)組值來(lái)進(jìn)行計(jì)算;
- 通過(guò)循環(huán)對(duì)左右側(cè)數(shù)組的值進(jìn)行賦值,即累乘,當(dāng)前元素值可設(shè)置為1不影響結(jié)果。
代碼展示
class Solution {public int[] productExceptSelf(int[] nums) {int size = nums.length;int[] ans = new int[size];int[] left = new int[size];left[0] = 1;int[] right = new int[size];right[size - 1] = 1;for (int i = 1; i < size; i++){left[i] = nums[i - 1] * left[i - 1];}for (int i = size - 2; i >= 0 ; i--){right[i] = right[i + 1] * nums[i + 1];}for (int i = 0; i < size; i++){ans[i] = left[i] * right[i];}return ans;}
}