Example:
Input:[1,2,3,4]
Output:[24,12,8,6]
leetcode提示不能用除法,保证O(n)时间复杂度
解题思路:
leftProduct[]存储左乘,rightProduct[]存储右乘。如leftProduct[2]代表3的左乘是 1 * 2 = 2;rightProduct[2]代表3的右乘是4;
result[3] = 2 * 4 = 8.
C++版本
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> leftProduct(nums.size());
vector<int> rightProduct(nums.size());
vector<int> result(nums.size());
for(int i = 1;i < nums.size();i++){
if(i == 0){
leftProduct[0] = 1;
}
else{
leftProduct[i] = leftProduct[i - 1] * nums[i - 1];
}
}
for(int i = nums.size() - 1;i >= 0;i--){
if(i == nums.size() - 1){
rightProduct[nums.size() - 1] = 1;
}
else{
rightProduct[i] = rightProduct[i + 1] * nums[i + 1];
}
result[i] = leftProduct[i] * rightProduct[i];
}
return result;
}
Java版本
public int[] productExceptSelf(int[] nums) {
int[] leftProduct = new int[nums.length]; //左乘
int[] rightProduct = new int[nums.length]; //右乘
int[] result = new int[nums.length];
for(int i = 0;i < nums.length;i++){
if(i == 0){
leftProduct[0] = 1;
}
else{
leftProduct[i] = leftProduct[i - 1] * nums[i - 1];
}
}
for(int i = nums.length - 1;i >= 0;i--){
if(i == nums.length - 1){
rightProduct[nums.length - 1] = 1;
}
else{
rightProduct[i] = rightProduct[i + 1] * nums[i + 1];
}
result[i] = leftProduct[i] * rightProduct[i];
}
return result;
}
本小白华中科技大学在读研究生,自然语言处理方向。现每日一更LeetCode Top 100 Liked Questions, 旨在于通过通俗易懂的画风和诸位计算机朋友们一起成长呀,不局限某题,争取举一反三,所有Questions均呈上C++和Java解法,不足之处多多指正,共同学习。