不包含本位置值的累乘数组
【題目】
給定一個整型數(shù)組arr,返回不包含本位置值的累乘數(shù)組。?
例如,arr = [2, 3, 4, 1],返回[12, 8, 24, 6],即除自己以外,其他位置上的累乘。
【要求】
時間復(fù)雜度O(N)
除需要返回的結(jié)果數(shù)組外,額外空間復(fù)雜度O(1)。
【基本思路】
方法一。使用除法進(jìn)行實(shí)現(xiàn)。所有數(shù)的累積記為all,如果數(shù)組中不存在0,那么結(jié)果數(shù)組中每一個位置的值為 all/arr[i];如果數(shù)組中存在一個0,那么除該位置的值為all,其余都是0;如果有兩個或者兩個以上的0,結(jié)果數(shù)組全為0
?
方法二。不使用除法進(jìn)行實(shí)現(xiàn)。分別使用輔助兩個數(shù)組left和right,其中l(wèi)eft表示數(shù)組從左到右的累乘結(jié)果(即left[i] = arr[0…i]的累乘);相反,right表示數(shù)組從右到左的累乘結(jié)果。那么對于結(jié)果數(shù)組res,res[i] = left[i-1] * right[i+1]。?
實(shí)際上,并不需要額外聲明兩個輔助數(shù)組。可以復(fù)用結(jié)果數(shù)組res,即先將res當(dāng)輔助數(shù)組用,再把res調(diào)整為結(jié)果數(shù)組即可。具體實(shí)現(xiàn)見如下代碼:
?
總結(jié)
以上是生活随笔為你收集整理的不包含本位置值的累乘数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 边界都是1的最大正方形大小
- 下一篇: 求最短通路值