NC213. 除自身以外数组的乘积
描述
示例1
输入:
[1,2,3,4]
输出:
[24,12,8,6]
说明:
res[0]=2*3*4=24 res[1]=1*3*4=12 res[2]=1*2*4=8 res[3]=1*2*3=6C++ 解法, 执行用时: 17ms, 内存消耗: 2584KB, 提交时间: 2021-12-28
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> timesExceptSelf(vector<int>& nums) { // write code here int size = nums.size(); vector<int> left; left.resize(size); vector<int> right; right.resize(size); left[0] =1; right[size-1] = 1; for(int i = 1; i < size; ++i) { left[i] = nums[i-1]*left[i-1]; right[size-1-i] = nums[size-i] *right[size-i]; } for(int i =0; i < size; ++i) { left[i] *= right[i]; } return left; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 2616KB, 提交时间: 2022-02-08
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> timesExceptSelf(vector<int>& nums) { // write code here vector<int> vec; int temp=1; for(int i=0;i<nums.size();i++) { temp=temp*nums[i]; } for(int i=0;i<nums.size();i++) { if(nums[i]==0) { int temp1=1; for(int j=0;j<nums.size();j++) { if(j!=i) { temp1=temp1*nums[j]; } } vec.push_back(temp1); }else{ vec.push_back(temp/nums[i]); } } return vec; } };
C 解法, 执行用时: 18ms, 内存消耗: 2216KB, 提交时间: 2022-02-06
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型一维数组 * @return int* returnSize 返回数组行数 * * C语言声明定义全局变量请加上static,防止重复定义 */ int* timesExceptSelf(int* nums, int numsLen, int* returnSize ) { int *a=(int *)malloc(numsLen*sizeof(int)); int add=1; int i; for(i=0;i<numsLen;i++) { a[i]=add; add=add*nums[i]; } add=1; for(i=numsLen-1;i>=0;i--) { a[i]=a[i]*add; add=add*nums[i]; } *returnSize=numsLen; return a; }
C++ 解法, 执行用时: 18ms, 内存消耗: 2588KB, 提交时间: 2021-12-13
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> timesExceptSelf(vector<int>& nums) { // write code here int n = nums.size(); vector<int> ret(n,1); int tmp = nums[0]; for(int i = 1; i<n; ++i){ ret[i] *= tmp; tmp *= nums[i]; } tmp = nums[n-1]; for(int i=n-2; i>=0; --i){ ret[i] *= tmp; tmp *= nums[i]; } return ret; } };
C++ 解法, 执行用时: 18ms, 内存消耗: 2608KB, 提交时间: 2022-01-26
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> timesExceptSelf(vector<int>& nums) { // write code here int len = nums.size(); if(len < 2) { return {}; } vector<int> ret_vec(len,1); for(int i = 1; i < len; ++i) { ret_vec[i] = ret_vec[i-1]*nums[i-1]; } int tmp1 = nums[len-1],tmp2; nums[len -1] = 1; for(int i = len-2; i >= 0; --i) { tmp2 = nums[i]; nums[i] = tmp1 * nums[i+1]; tmp1 = tmp2; } for(int i = 0; i < len; ++i) { ret_vec[i]*=nums[i]; } return ret_vec; } };