leetcode 238. Product of Array Except Self (乱搞)
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]
.
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.)
先来个O(n)空间的无脑解法。。。一个前缀积一个后缀积就好了。。。
1class Solution {
2public:
3 vector<int> productExceptSelf(vector<int>& nums) {
4 vector<int>res;
5 vector<int>pre,suf;
6 int siz = nums.size();
7 if (siz==0) return res;
8 for ( int i = 0 ; i < siz ; i++)
9 {
10 int tmp;
11 if (i==0) tmp = nums[0];
12 else tmp = pre[i-1]*nums[i];
13 pre.push_back(tmp);
14 }
15 int cnt = 0 ;
16 for ( int i = siz -1 ; i>= 0 ; i--)
17 {
18 int tmp;
19 if (i==siz-1) tmp = nums[siz-1];
20 else tmp = suf[cnt++]*nums[i];
21 suf.push_back(tmp);
22 }
23 // for ( int i = 0 ; i < siz ; i++) printf("%d ",pre[i]); puts("");
24 // for ( int i = 0 ; i < siz ; i++) printf("%d ",suf[i]);puts("");
25 reverse(suf.begin(),suf.end());
26 for ( int i = 0 ; i < siz; i++)
27 {
28 int l = i-1;
29 int r = i+1;
30 int x,y;
31 if (l<0) x = 1;
32 else x = pre[l];
33 if (r>=siz) y = 1;
34 else y = suf[r];
35 // cout<<"x:"<<x<<" y:"<<y<<endl;
36 res.push_back(x*y);
37 }
38 return res;
}
};
常数空间的做法。。。想了半天没有想法。。。
看了solution...发现就是借用res数组搞事情。。。。每个位置的答案扫完两遍得到。。。
感觉。。。非常的。。。无聊啊。。。。真心没意思吧,还以为是什么巧妙的做法呢。。。