算法设计与应用基础:第一周(3)
2017-02-23 22:24
405 查看
238. Product of Array Except Self
Add to ListDescription Submission Solutions
Total Accepted: 84193
Total Submissions: 176822
Difficulty: Medium
Contributors: Admin
Given an array of n integers where n > 1,
nums,
return an array
outputsuch that
output[i]is
equal to the product of all the elements of
numsexcept
nums[i].
Solve it without division and in O(n).
For example, given
[1,2,3,4],
return
[24,12,8,6].
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
codes:
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int n=nums.size(); int fromBegin=1; int fromLast=1; vector<int> res(n,1); for(int i=0;i<n;i++){ res[i]*=fromBegin; fromBegin*=nums[i]; } //for(int i=0;i<n;i++) //cout<<res[i]<<endl; for(int i=n-1;i>=0;i--) { res[i]*=fromLast; fromLast*=nums[i]; } //for(int i=0;i<n;i++) //cout<<res[i]<<endl; return res; } };
解题思路:主要在于算法中的两层循环,思路借鉴了博客一位大神对于算数组前n项积的方法。第一层循环:利用哨兵值Fromfirst每次res[i]累乘Fromfirst相当于累乘nums[i]之前的数组累积;第二层循环:res[i]每次累乘Fromlast相当于累乘nums[i]之后的数组累积;两层循环之后可得到正确的res值
res[i]*=fromBegin; fromBegin*=nums[i];第一行res[i]累乘fromBegin,第二行fromBegin累乘nums[i]以达到res[i]累乘之前所有的目的
相关文章推荐
- 算法设计与应用基础第一周
- 算法设计与应用基础作业第一周
- 算法设计与应用基础:第一周
- 算法设计与应用基础:第一周(2)
- 算法设计与应用基础:第一周(1)
- 算法设计与应用基础-第一周题目
- 算法设计与应用基础: 第三周(1)
- 算法设计与应用基础: 第五周(1)
- 算法设计与应用基础作业第二周
- 算法设计与应用基础作业(二)
- 算法设计与应用基础:第七周
- 算法设计与应用基础: 第三周(2)
- 算法设计与应用基础-第四周
- 20135328信息安全系统设计基础第一周学习总结(Linux应用)
- 算法设计与应用基础: 第三周(3)
- 算法设计与应用基础: 第七周(1)
- 算法设计与应用基础: 第四周(1)
- 算法设计与应用基础:第二周(1)
- 算法设计与应用基础-第三周
- 算法设计与应用基础作业(三)