问题描述

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例:

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

提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。

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

进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

解题思路1:(左右乘积列表)

我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。

对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们看看代码

class Solution {public int[] productExceptSelf(int[] nums) {int n=nums.length;if(nums.length<=1){return nums;}int [] pre=new int[n];      //pre表示从某个元素左边所有元素的乘积int [] next=new int[n];     //next表示某个元素右边的所有元素的乘积pre[0]=1;           //初始最左边的数的乘积for(int i=1;i<n;i++){   //依次计算左边所有元素的乘积放入到数组中pre[i]=pre[i-1]*nums[i-1];}next[n-1]=1;for(int i=n-2;i>=0;i--){    //依次计算右边所有元素的成绩放入到数组中next[i]=next[i+1]*nums[i+1];}int []res=new int[n];res[0]=next[0];res[n-1]=pre[n-1];//左边所有元素的乘积乘以右边所有元素的乘积for(int i=1;i<n-1;i++){res[i]=pre[i]*next[i];}return res;}
}

解题思路2:空间复杂度O(1)

尽管上面的方法已经能够很好的解决这个问题,但是空间复杂度并不为常数。

由于输出数组不算在空间复杂度内,那么我们可以将 L 或 R 数组用输出数组来计算。先把输出数组当作 L 数组来计算,然后再用left动态保存nums数组当前左边所有元素乘积得到的结果。让我们来看看基于这个思想的算法。

class Solution {public int[] productExceptSelf(int[] nums) {int n=nums.length;if(nums.length<=1){return nums;}//res数组不仅起到保存结果值的作用,也起到了保存右边所有元素乘积的作用int res[]=new int[n];//先让res数组保存右边所有元素的乘积res[n-1]=1;for(int i=n-2;i>=0;i--){res[i]=res[i+1]*nums[i+1];}int left=1;     //left可以用来累积左边元素的乘积//再依次计算每个元素的其余元素的乘积,而res[0]已经计算出来了for(int i=1;i<n;i++){left*=nums[i-1];res[i]=left*res[i];}return res;}
}

leetcode238-除自身以外数组的乘积相关推荐

  1. leetcode238 除本身以外数组的乘积

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  2. Leetcode--238. 除自身以外数组的乘积

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  3. DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积

    C语言好题方法总结.日积月累,慢慢进步! 目录 一.题干 二.题解 1.暴力破解法 2.左右累乘法 思路 代码 三.总结 一.题干 LeetCode链接 238. 除自身以外数组的乘积https:// ...

  4. leetcode刷刷题(44) ---- 除自身以外数组的乘积(C语言版)

    2020-6-4 I once heard that the evil spirits who lived in Rashomon fled for fear of the cruelty of hu ...

  5. 除自身以外数组的乘积—leetcode238

    给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: ...

  6. LeetCode实战:除自身以外数组的乘积

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...

  7. opencv计算两数组的乘积_opencv矩阵运算(2)

    简单介绍 本篇承接上一篇.继续opencv下矩阵计算的函数使用. 计算矩阵的逆 注意:矩阵A是可逆矩阵的充分必要条件是行列式detA不等于0. 详细代码 double x[3][3] = {{1, 2 ...

  8. leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)

    题目 https://leetcode.com/problems/product-of-array-except-self/ 题解 本题思路比较简单,先算一个原数组的总的乘积 p,然后对应除以每一个位 ...

  9. opencv计算两数组的乘积_#剑指Offer#12. 构建乘积数组

    题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]. 其中B中的元素B[i]=A[0] * A[1]... * A[i-1] * A[i+1]... * A ...

  10. [剑指offer]面试题第[66]题[构建乘积数组][Leetcode][JAVA][第238题][除自身以外数组的乘积][数组]

    [问题描述][中等] 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘 ...

最新文章

  1. GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
  2. 在线作图|如何绘制一张好看的点棒图
  3. 卷积网络基础知识---Group Convolution分组卷积
  4. Java代码实现执行Linux服务器命令
  5. 1 uC/OS工程目录
  6. 安卓* 系统级 Java*/C++ 代码调试
  7. 如何开发一个多种语言版本的C#程序
  8. 前端页面怎么办啊一条长的信息换行展示_前端入门!不容错过!HTML基本标签知识大盘点...
  9. pycharm汉化包使用后无法打开设置选项问题
  10. SIM7600模块固件升级(模块自身升级)
  11. 国内小程序生态服务平台即速应用完成5000万元A+轮融资...
  12. 网页前端大作业主界面(Html+CSS+JS+Axios)
  13. 第一二天作业-BGP MPLS + OSPF分流互备做法
  14. c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)
  15. ATF(Arm Trusted Firmware)/TF-A Chapter 04 Authentication Framework
  16. BaySpec 光纤光栅解调模块 FBGA
  17. linux学习——1.ping通百度
  18. 程序员新人面临最尴尬的事:需要工作积累经验,需要有经验才能找到工作!到底怎么办?...
  19. 如何从一个空有上进心的人,变成行动上的巨人?
  20. 滤波器基础01——滤波器的种类与特性

热门文章

  1. 薏米到底有多强大?真是没想到还能这样吃~
  2. leetcode-reverse words in a string
  3. 中职计算机课程教学,提高中职计算机课程教学效率的途径
  4. java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. java如何检测输入合法_使用java写的一个简易的计算器,可以检测输入是否合法。.doc...
  6. setnx是原子操作吗_Redis面试七连问,你能扛得住吗?
  7. 梯度下降和导数的作用
  8. pion webrtc 示例代码解析 一
  9. php变量有三种不同的作用域,PHP中变量类型与转换,变量的检测以及变量的作用域学习--2018年4月13日12时03分...
  10. 华为鸿蒙系统支持什么手机_什么样的手机可以刷鸿蒙系统?看看你的手机支持吗?...