国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Leetcode 238 - Product of Array Except Self(遞推)

2019-11-08 19:51:55
字體:
來源:轉載
供稿:網友

題意

給定一個數組a[],對于其中的每一個元素x,求數組中所有數相乘并除以該元素x的結果。并且不能使用除法。

思路

算法1

O(n)時間和O(n)空間。

我們維護一個l[i]和r[i]數組,分別代表從左往右乘到元素ai的積和從右往左乘到元素ai的積。

那么,對于我們要求的結果ansi=li?1?ri+1

算法2

O(n)時間和O(1)空間。

我們需要想辦法去優化一下空間,其實從我們上面的式子ansi=li?1?ri+1就可以發現:我們的li是可以從左向右遞推得到的,我們的ri也可以從右向左遞推得到,并且在遞推過程中,我們的l和r其實不用用數組保存。

那么我們只需要從左往右遍歷一遍得到ansi=li?1,然后再從右往左遍歷一遍得到ansi=ansi?ri+1即可。

代碼

//algorithm 1class Solution {public: vector<int> PRoductExceptSelf(vector<int>& nums) { vector<int> l(nums.size(), 0); vector<int> r(nums.size(), 0); vector<int> ans(nums.size(), 0); for (int i = 0; i < nums.size(); i++) l[i] = i ? l[i - 1] * nums[i] : nums[i]; for (int i = nums.size() - 1; i >= 0; i--) r[i] = i == nums.size() - 1 ? nums[i] : r[i + 1] * nums[i]; for (int i = 0; i < nums.size(); i++) ans[i] = (i == 0 ? 1 : l[i - 1]) * (i == nums.size() - 1 ? 1 : r[i + 1]); return ans; }};//algorithm 2class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> ans(nums.size(), 0); int l = 1, r = 1; for (int i = 0; i < nums.size(); i++) { ans[i] = l; l *= nums[i]; } for (int j = nums.size() - 1; j >= 0; j--) { ans[j] *= r; r *= nums[j]; } return ans; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴塘县| 饶阳县| 肃北| 米林县| 临泉县| 双桥区| 奉节县| 遵义市| 仁化县| 延长县| 专栏| 武平县| 漯河市| 长兴县| 株洲市| 广元市| 赫章县| 浙江省| 乳源| 子洲县| 屯门区| 八宿县| 台江县| 肥乡县| 门头沟区| 定西市| 常熟市| 得荣县| 清水河县| 东丰县| 定安县| 进贤县| 凤冈县| 抚顺县| 容城县| 汾西县| 张家界市| 文安县| 塘沽区| 陆丰市| 青铜峡市|