238. 除自身以外数组的乘积【 力扣(LeetCode) 】
创始人
2024-11-13 14:35:47
0

一、题目描述

  给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

  题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

  请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

二、测试用例

示例 1:

输入: nums = [1,2,3,4] 输出: [24,12,8,6] 

示例 2:

输入: nums = [-1,1,0,-3,3] 输出: [0,0,9,0,0] 

三、解题思路

  1. 基本思路:
      动态规划
  2. 具体思路:
    • 左右乘积:记给定数组为 nums ,对于每个元素,其结果都可以看成是其左边的元素乘积和右边元素乘积的乘积,所以可以先算出每个元素左边的乘积和右边的乘积。对于左边元素的乘积,记为数组 L ,第 i 个元素表示前 i 个元素的乘积,使用动态规划,第一个元素是 1 ,因为左边为空,接下来,第 i 个元素是 num[i-1]L[i-1] ;右边元素的乘积(记为 R )类似,只不过是最后一个元素为 1 ,然后从后往前推;最后每一个元素的结果就是 L[i] * R[i]
    • 总积除法:如果可以使用除法的话,可以先算出总的非 0 积。然后判断数组中有几个 0 元素,如果两个及其以上,则所有元素的结果都是 0 ;如果只有 1 个,那么除了 0 元素的结果为 总积,其他都是 0 ;如果没有 0 元素,则对于每个元素的结果就是总的积 除以 本身;

四、参考代码

4.1 左右乘积

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( n ) \Omicron(n) O(n)

class Solution { public:     vector productExceptSelf(vector& nums) {         int n=nums.size();         vector L(n),R(n);         L[0]=1;         R[n-1]=1;         for(int i=1;i             L[i]=L[i-1]*nums[i-1];             R[n-i-1]=R[n-i]*nums[n-i];         }         for(int i=0;i             nums[i]=L[i]*R[i];         }         return nums;     } }; 

4.2 总积除法

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( 1 ) \Omicron(1) O(1)

class Solution { public:     vector productExceptSelf(vector& nums) {         int n=nums.size();         int zero=0,mul=1;         for(int i=0;i             if(nums[i]==0){                 zero++;             }             else{                 mul*=nums[i];             }         }         if(zero>=2){  // 0 元素个数大于等于 2 个,总积为 0              mul=0;         }          for(int i=0;i             if(nums[i]!=0)             	// (zero-1)*(zero-1) 为了处理 0 元素个数为 1 和 0 的情况。                 nums[i]=mul/nums[i]*(zero-1)*(zero-1);               else                 nums[i]=mul;         }         return nums;     } }; 

相关内容

热门资讯

透视数据(aapOker)aa... 透视数据(aapOker)aapoker辅助工具存在(透视)好像有挂(详细辅助透视教程)1、不需要A...
透视安装(wPk)wpk发牌逻... 您好,wpk发牌逻辑这款游戏可以开挂的,确实是有挂的,需要了解加去Q群【1067239143】很多玩...
透视科技!智星德州菠萝开挂,(... 透视科技!智星德州菠萝开挂,(线上wpk德州)竟然是有挂(详细辅助教你教程)透视科技!智星德州菠萝开...
透视安装(德州aa扑克)aap... 透视安装(德州aa扑克)aapoker透明挂(透视)真是是真的有挂(详细辅助曝光教程)aapoker...
透视辅助(Wpk)wpk透明挂... 透视辅助(Wpk)wpk透明挂(透视)详细辅助揭秘教程(原来是有挂)1、进入到wpk透明挂黑科技之后...
透视攻略!德州之星有外挂,(德... 透视攻略!德州之星有外挂,(德州wepower)原来真的有挂(详细辅助必赢方法);1、这是跨平台的德...
透视插件(aapoKer)aa... 透视插件(aapoKer)aapoker挂(透视)切实有挂(详细辅助详细教程)1、进入游戏-大厅左侧...
透视免费(微扑克)微扑克辅助机... 透视免费(微扑克)微扑克辅助机器人(透视)详细辅助安装教程(真是是有挂)1、微扑克辅助机器人系统规律...
透视挂透视!德扑ai智能机器人... 透视挂透视!德扑ai智能机器人,(德州wpk)其实有挂(详细辅助总结教程)1、完成德扑ai智能机器人...
透视新版(aa扑克)aapok... 透视新版(aa扑克)aapoker透明挂(透视)一贯是真的有挂(详细辅助存在挂教程)aapoker透...