leetcode_c++:Product of Array Except Self(238)

来源:互联网 发布:网络诽谤怎么处理 编辑:程序博客网 时间:2024/05/29 14:55

题目

Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

Solve it without division and in O(n).

For example, given [1,2,3,4], return [24,12,8,6].


算法

O(n)
我们可以先遍历一遍数组,每一个位置上存之前所有数字的乘积。那么一遍下来,最后一个位置上的数字是之前所有数字之积,是符合题目要求的,只是前面所有的数还需要在继续乘。我们这时候再从后往前扫描,每个位置上的数在乘以后面所有数字之积,对于最后一个位置来说,由于后面没有数字了,所以乘以1就行。


class Solution {public:    vector<int> productExceptSelf(vector<int>& nums) {        vector<int> res(nums.size(), 1);        for (int i = 1; i < nums.size(); ++i) {            res[i] = res[i - 1] * nums[i - 1];        }        int right = 1;        for (int i = nums.size() - 1; i >= 0; --i) {            res[i] *= right;            right *= nums[i];        }        return res;    }};
0 0
原创粉丝点击