通关剑指Offer——剑指 Offer 66. 构建乘积数组

1.题目描述

剑指 Offer 66. 构建乘积数组

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。

示例:

输入: [1,2,3,4,5]
输出: [120,60,40,30,24]

2.解题思路与代码

2.1 解题思路

题目要求得到数组除当前位以外的数的乘积,首先想到的是求数组所有数的乘积,然后依次除以当前位,但是这样的方法如果遇到 0 就会报错了。这里就可以使用前缀和数组的思想,先从左往右遍历得到当前位左边的数的乘积,然后在从右往左遍历得到当前数右边所有位的乘积,最后将当前数左右两边的乘积相乘便能够得到最终结果。以 [1, 2, 3, 4, 5] 为例进行详解
首先我们准备一个数组存放数左边所有数的乘积。让第一位为 1,然后从左往右便利,依次得到当前数左边的乘积

然后再准备一个数组存放数右边所有数的乘积。设置数组最后一位为 1,然后从右往左进行遍历,依次得到当前数右边所有数的乘积

最后将两个数组依次按位相乘便得到最终的结果

2.2 代码

class Solution {
    public int[] constructArr(int[] a) {
        int n = a.length;
        int[] ans = new int[n];
        if (n == 0) {
            return ans;
        }
        int[] left = new int[n];
        int[] right = new int[n];
        left[0] = 1;
        for (int i = 1; i < n; i++) {
            left[i] = a[i - 1] * left[i - 1];
        }
        right[n - 1] = 1;
        for (int i = n - 2; i >= 0; i--) {
            right[i] = a[i + 1] * right[i + 1];
        }
        for (int i = 0; i < n; i++) {
            ans[i] = left[i] * right[i];
        }
        return ans;

    }
}

2.3 测试结果

通过测试
测试结果

3.总结

  • 使用前缀和数组思想获取左边所有数乘积和右边所有数乘积
  • 将左右两边乘积再依次相乘便得到最终结果
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: storage(已通关).circ是一个编程程序的文件名,文件的扩展名为.circ。这个文件名可能与计算机存储有关。 计算机存储是计算机用来存储数据和程序的地方。在计算机的存储系统中,数据和程序可以被存储在不同的地方,例如内存、硬盘、固态硬盘等。 根据文件名中的storage(已通关).circ,可能涉及到与游戏相关的存储操作。可能是一个游戏程序或者存档文件。使用.circ作为文件的扩展名,可能意味着这个文件是使用特定编程语言编写的特定程序。 这个文件的内容可能与保存游戏进度、存储游戏设置、存储游戏数据等相关。根据已通关的意思,可能表示这个文件是保存了某个游戏的通关状态的存档文件。 想要详细了解这个文件内容,需要使用特定的软件或工具来打开和查看.circ文件。通过查看文件的内容,可以进一步了解文件中存储了哪些数据和程序。 总之,storage(已通关).circ是一个使用.circ作为文件扩展名的文件名,可能是一个与游戏相关的存储文件,保存了某个游戏的通关状态或者其他相关数据。 ### 回答2: "storage(已通关).circ"是一个计算机编程文件,用于描述储存器的功能和操作。这个文件的扩展名".circ"可能的是该文件在"Logicly"软件中的使用,因此我将根据这个假设来回答你的问题。 储存器是计算机中用于存储和检索数据的设备。在电子计算机中,储存器可以包括各种各样的设备,例如硬盘驱动器、内存和缓存等。储存器的作用是在计算过程中存储和读取数据,以及在计算机关闭后存储数据以备以后使用。 "storage(已通关).circ"文件可能包含一组逻辑电路图,用于模拟储存器的功能和操作。在这个文件中,你可能会看到各种各样的组件,例如触发器、锁存器和多路选择器等。这些组件可以用来存储和读取数据。 如果你已经通关这个文件,那么你可能已经成功地设计并实现了一个储存器电路。在这个过程中,你可能需要理解储存器的工作原理,例如如何使用触发器来实现数据的稳定存储和时序控制等。通过通关这个文件,你可能已经掌握了如何设计和使用储存器电路的能力。 储存器在计算机中起着至关重要的作用。无论是用于存储程序代码、用户数据还是操作系统数据,储存器都是计算机系统的核心组成部分。通过设计和实现储存器电路,你已经迈出了了解计算机体系结构和编程的重要一步。 总而言之,“storage(已通关).circ”是一个描述储存器功能和操作的计算机编程文件。通过通关这个文件,你可能已经成功地设计和实现了一个储存器电路,并对计算机体系结构有了更深入的了解。 ### 回答3: storage(已通关).circ是一个文件名,它表示已经通过了存储问题的一种解决方案。在计算机领域,存储是将数据保存在某种介质中以供将来使用的过程。 在storage(已通关).circ文件中,这可能是一个存储相关的电路设计文件。这个文件可以包含了一些存储设备的相关配置和连接信息。存储电路是计算机中非常关键的一部分,它用于存储和检索数据。 根据文件名中的“已通关”,我们可以假设该文件代表了一个已经通过测试或验证的存储电路设计。通关可能意味着该电路满足了规格要求并且能够正常运行。 在计算机存储中,常见的存储设备包括硬盘驱动器、固态硬盘、光盘、闪存驱动器和云存储等。存储通常被划分成两种基本形式:主存储器(RAM)和辅助存储器。 主存储器是计算机中用于存储正在运行的程序和数据的临时存储区域。它通常由固定数量的存储单元组成,每个存储单元都能通过唯一的地址进行访问。主存储器具有快速访问速度,但是断电后会丢失数据。 辅助存储器用于长期存储数据和程序。它通常用于存储操作系统、应用程序、文档和其他需要持久保存的数据。辅助存储设备有不同的容量和速度。其中,硬盘驱动器是一种常见而且容量较大的存储设备,固态硬盘则拥有更快的读写速度。 总之,根据文件名中的信息,storage(已通关).circ可能是一个已经通过测试的存储电路设计文件。它描述了一个满足规格要求并能够正常工作的存储解决方案。这个文件可能包含了一些关于存储设备的配置和连接信息。存储在计算机中扮演着至关重要的角色,它用于保存数据以备将来使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值