当前位置:首页 > 科技  > 软件

除自身以外数组的乘积:三种解法及Java代码示例

来源: 责编: 时间:2023-12-25 17:28:56 148观看
导读在处理数组相关的问题时,有时候需要计算除数组中某个元素以外的所有元素的乘积。这个问题可以通过多种方法解决。本文将首先给出题目的详细描述,然后介绍三种解法,并提供相应的Java代码示例。最后,对每种解法进行时间和空

在处理数组相关的问题时,有时候需要计算除数组中某个元素以外的所有元素的乘积。这个问题可以通过多种方法解决。本文将首先给出题目的详细描述,然后介绍三种解法,并提供相应的Java代码示例。最后,对每种解法进行时间和空间复杂度的分析,帮助读者评估解法的效率和性能。VnW28资讯网——每日最新资讯28at.com

VnW28资讯网——每日最新资讯28at.com

题目描述

给定一个整数数组 nums,返回一个数组 output,其中 output[i] 等于除 nums[i] 之外的所有元素的乘积。VnW28资讯网——每日最新资讯28at.com

注意:请不要使用除法,且在 O(n) 时间复杂度内完成此问题的解决。VnW28资讯网——每日最新资讯28at.com

示例:VnW28资讯网——每日最新资讯28at.com

输入: [1, 2, 3, 4]VnW28资讯网——每日最新资讯28at.com

输出: [24, 12, 8, 6]VnW28资讯网——每日最新资讯28at.com

解释: 除了自身以外的乘积为:[2x3x4, 1x3x4, 1x2x4, 1x2x3] = [24, 12, 8, 6]VnW28资讯网——每日最新资讯28at.com

1. 解法一:暴力法

暴力法是最简单直接的解法,即对于数组中的每个元素,都计算除自身以外的其他元素的乘积。具体步骤如下:VnW28资讯网——每日最新资讯28at.com

public int[] productExceptSelf(int[] nums) {   int n = nums.length;   int[] output = new int[n];      for (int i = 0; i < n; i++) {       int product = 1;       for (int j = 0; j < n; j++) {           if (i != j) {               product *= nums[j];          }      }       output[i] = product;  }      return output;}

时间复杂度分析:VnW28资讯网——每日最新资讯28at.com

  • 外层循环遍历数组,时间复杂度为 O(n)。
  • 内层循环遍历数组,时间复杂度为 O(n)。
  • 总体时间复杂度为 O(n^2)。

空间复杂度分析:VnW28资讯网——每日最新资讯28at.com

  • 使用了额外的数组 output 来存储结果,空间复杂度为 O(n)。

2. 解法二:左右乘积列表

解法二利用两个辅助数组,分别记录每个元素左侧和右侧的乘积。具体步骤如下:VnW28资讯网——每日最新资讯28at.com

public int[] productExceptSelf(int[] nums) {   int n = nums.length;   int[] output = new int[n];      int[] leftProducts = new int[n];   int[] rightProducts = new int[n];      leftProducts[0] = 1;   for (int i = 1; i < n; i++) {       leftProducts[i] = leftProducts[i - 1] * nums[i - 1];  }      rightProducts[n - 1] = 1;   for (int i = n - 2; i >= 0; i--) {       rightProducts[i] = rightProducts[i + 1] * nums[i + 1];  }      for (int i = 0; i < n; i++) {       output[i] = leftProducts[i] * rightProducts[i];  }      return output;}

时间复杂度分析:VnW28资讯网——每日最新资讯28at.com

  • 第一个循环遍历数组,时间复杂度为 O(n)。
  • 第二个循环遍历数组,时间复杂度为 O(n)。
  • 第三个循环遍历数组,时间复杂度为 O(n)。
  • 总体时间复杂度为 O(n)。

空间复杂度分析:VnW28资讯网——每日最新资讯28at.com

  • 使用了两个辅助数组来存储左侧和右侧的乘积,空间复杂度为 O(n)。

3. 解法三:空间优化

解法三对解法二进行了空间优化,只使用一个辅助数组来记录左侧的乘积,并在计算右侧乘积时即时更新结果。具体步骤如下:VnW28资讯网——每日最新资讯28at.com

public int[] productExceptSelf(int[] nums) {   int n = nums.length;   int[] output = new int[n];      output[0] = 1;   for (int i = 1; i < n; i++) {       output[i] = output[i - 1] * nums[i - 1];  }      int rightProduct = 1;   for (int i = n - 1; i >= 0; i--) {       output[i] *= rightProduct;       rightProduct *= nums[i];  }      return output;}

时间复杂度分析:VnW28资讯网——每日最新资讯28at.com

  • 第一个循环遍历数组,时间复杂度为 O(n)。
  • 第二个循环遍历数组,时间复杂度为 O(n)。
  • 总体时间复杂度为 O(n)。

空间复杂度分析:VnW28资讯网——每日最新资讯28at.com

  • 只使用了一个辅助数组来存储左侧的乘积,空间复杂度为 O(n)。

结论

本文介绍了题目"除自身以外数组的乘积"的详细描述,并给出了三种解法:暴力法、左右乘积列表和空间优化。下面是它们的时间和空间复杂度的总结:VnW28资讯网——每日最新资讯28at.com

解法VnW28资讯网——每日最新资讯28at.com

时间复杂度VnW28资讯网——每日最新资讯28at.com

空间复杂度VnW28资讯网——每日最新资讯28at.com

暴力法VnW28资讯网——每日最新资讯28at.com

O(n^2)VnW28资讯网——每日最新资讯28at.com

O(n)VnW28资讯网——每日最新资讯28at.com

左右乘积列表VnW28资讯网——每日最新资讯28at.com

O(n)VnW28资讯网——每日最新资讯28at.com

O(n)VnW28资讯网——每日最新资讯28at.com

空间优化VnW28资讯网——每日最新资讯28at.com

O(n)VnW28资讯网——每日最新资讯28at.com

O(n)VnW28资讯网——每日最新资讯28at.com

从复杂度分析可以看出,解法二和解法三都能够在线性时间内完成计算,而且空间复杂度也相对较低。因此,解法二和解法三是更优的解决方案。VnW28资讯网——每日最新资讯28at.com

在实际应用中,根据具体的问题和要求,选择合适的解法可以提高算法的效率和性能。希望本文能够帮助读者理解和掌握解决"除自身以外数组的乘积"问题的不同解法,并在实际编程中得到应用。如果想要了解更多数组相关的问题和解法,建议进一步学习相关的算法和数据结构知识。VnW28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-54008-0.html除自身以外数组的乘积:三种解法及Java代码示例

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 10分钟了解Python黑魔法 Yield、Iterator、Generator

下一篇: jstat,一把Java程序员必备的瑞士军刀

标签:
  • 热门焦点
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • Automa-通过连接块来自动化你的浏览器

    Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 之家push系统迭代之路

    之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 中国家电海外掘金正当时|出海专题

    中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 品牌洞察丨服务本地,美团直播成效几何?

    品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    在今日举行的2023年华为云数字文娱AI创新峰会上,华为云全球Marketing与销售服务总裁石冀琳表示,华为云将在后续推出盘古数字人大模型,可帮助用户12小
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
Top