传送门
nowcoder
leetcode
题目描述
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],
其中 B[i] = A[0]A[1]...A[i-1]*A[i+1]...*A[n-1]
,不能使用除法。
规定: B[0] = A[1]A[2]*...*A[n-1], B[n-1] = A[0]A[1]*...*A[n-2]
C++ 代码 - nowcoder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class Solution { public: vector<int> multiply(vector<int>& A) { if (A.size() <= 1) return vector<int>{};
int length = A.size(); vector<int> B(length, 0); B[0] = 1; for (int i = 1; i < length; i ++) { B[i] = B[i - 1] * A[i - 1]; }
int temp = 1; for (int i = length - 2; i >= 0; i --) { temp = temp * A[i + 1]; B[i] = B[i] * temp; }
return B; } };
|
C++ 代码 - leetcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
class Solution { public: vector<int> statisticalResult(vector<int>& nums) { int n = nums.size(); if (n == 0) return vector<int>{};
vector<int> prefix(n); prefix[0] = nums[0]; for (int i = 1; i < n; i++) { prefix[i] = prefix[i - 1] * nums[i]; } vector<int> suffix(n); suffix[n - 1] = nums[n - 1]; for (int i = n - 2; i >= 0; i--) { suffix[i] = suffix[i + 1] * nums[i]; }
vector<int> res(n); res[0] = suffix[1]; res[n - 1] = prefix[n - 2]; for (int i = 1; i <= n - 2; i++) { res[i] = prefix[i - 1] * suffix[i + 1]; } return res; } };
class Solution { public: vector<int> statisticalResult(vector<int>& arrayA) { int length = arrayA.size(); if (length == 0) return vector<int>{};
vector<int> arrayB(length, 0); arrayB[0] = 1; for (int i = 1; i < length; i ++) { arrayB[i] = arrayB[i - 1] * arrayA[i - 1]; }
int temp = 1; for (int i = length - 2; i >= 0; i --) { temp = temp * arrayA[i + 1]; arrayB[i] = arrayB[i] * temp; }
return arrayB; } };
|