题目:
给定长度为 n 的整数数组 nums
,其中 n > 1,返回输出数组 output
,其中 output[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
示例:
输入:
[1,2,3,4]
输出:
[24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
思路方法:
这道题我目前没有想到在O(n)时间复杂度内完成,就先说一下我的比较复杂的方法吧,后续会加上更简单的方法。
我是用两个循环,因为我们知道输出数组的大小跟输入数组的大小是相等的,所以用外部循环记录输出数组的下标值,
内部循环记录输入数组,用一个if()语句,当两个数组下标值不相等时,执行if()语句的内容,里面的内容就是输入数组元素的乘积了,这里记得在第一个循环里设置一个局部变量,记录输入数组的乘积,记得每次都要初始化为1。
代码如下:
class Solution{
public:
vector<int> result(vector<int>& nums)
{
int n=nums.size(); //n表示数组nums的大小
vector<int> output;
for(int i=0;i<n;i++)
{
int sum=1;
for(int j=0;j<n;j++)
{
if(j!=i)
{
sum*=nums[j];
}
}
output[i]=sum;
}
return output;
}
};