leetcode——除自身以外的数组的乘积(java)

给你一个整数数组 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.所以我们首先建立前缀数组,然后令第一个元素为1,开始从第二个元素开始遍历,每一次都乘以nums的前一位数,累乘进当前索引。

3.然后我们还需要创建一个后缀数组,令末尾元素为1,然后从倒数第二个元素开始遍历,开始往前逐渐累乘,最后我们创建一个结果数组将前后缀数组相对应索引位置的相乘结果储存起来。

java 复制代码
class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] pre = new int[n];
        pre[0] = 1;
        for (int i = 1; i < n; i++) {
            pre[i] = pre[i - 1] * nums[i - 1];
        }
        int[] suf = new int[n];
        suf[n - 1] = 1;
        for (int i = n - 2; i >= 0; i--) {
            suf[i] = suf[i + 1] * nums[i + 1];
        }
        int[] ans = new int[n];
        for (int i = 0; i < n; i++) {
            ans[i] = pre[i] * suf[i];
        }
        return ans;
    }
}
相关推荐
liu****3 分钟前
19.map和set的封装
开发语言·数据结构·c++·算法
水冗水孚4 分钟前
双指针算法在实际开发中的具体应用之代码Review文章字符串的片段分割
算法·leetcode
DuHz4 分钟前
用于汽车雷达应用的步进频率PMCW波形——论文阅读
论文阅读·算法·汽车·信息与通信·信号处理·毫米波雷达
朝新_5 分钟前
【EE初阶 - 网络原理】传输层协议
java·开发语言·网络·笔记·javaee
张晓~183399481215 分钟前
碰一碰发抖音源码技术搭建部署方案
线性代数·算法·microsoft·矩阵·html5
oak隔壁找我5 分钟前
Java 使用技巧与最佳实践
java·后端
oak隔壁找我6 分钟前
SpringMVC 使用技巧与最佳实践
java·后端
oak隔壁找我6 分钟前
Spring 框架使用技巧与最佳实践
java·后端
weixin_448119948 分钟前
Datawhale人工智能的数学基础 202510第3次作业
人工智能·算法
前端架构师-老李9 分钟前
Java开发—JDK的安装和版本管理(macOS)
java·开发语言·macos