除自身以外数组的乘积

目录

一:题目链接

二:题目思路

三:代码实现


一:题目链接

二:题目思路

题目的思路与我们上一节讲的 "寻找数组的中心下标" 是一样的,只不过,有一些细节问题的处理。

思路就是定义和初始化 "前缀积" 数组 和 "后缀积" 数组,这些数组的元素是等于**前面(后面)几个 元素的乘积 ,不包括当前位置的元素乘积,**也就是:

java 复制代码
    //前缀积
    first_dp[i] = first_dp[i -1] * nums[i -1];

    //后缀积
    end_dp[i] = end_dp[i + 1] * nums[i + 1];

细节问题 就是,未初始化前,first_dp 0 和 end_dp n - 1 的值是 0,如果直接初始化,后续一直为 0,是错误的,这里我们可以先 令这两个位置的元素为 1 ,从此,后续的初始化就不会出现问题了。

三:代码实现

java 复制代码
        int n = nums.length;
        int[] answer = new int[n];

        int[] first_dp = new int[n];
        int[] end_dp = new int[n];

        //处理细节问题
        first_dp[0] = 1;
        end_dp[n -1] = 1;

        //初始化前缀积,后缀积数组
        for(int i = 1;i < n;i++) {
            first_dp[i] = first_dp[i -1] * nums[i -1];
        }

        for(int i = n - 2;i >= 0;i--) {
            end_dp[i] = end_dp[i + 1] * nums[i + 1];
        }

        //使用
        for(int i = 0;i < n;i++) {
            answer[i] = first_dp[i] * end_dp[i];
        }

        return answer;
相关推荐
Rambo.xia7 小时前
为什么去马赛克算法,决定了ISP的画质上限
算法·接口隔离原则
Benny_Tang7 小时前
题解:P10230 [COCI 2023/2024 #4] Lepeze
c++·算法
Geek-Chow7 小时前
06 训练管线:数据如何变成权重
人工智能·算法
郑州光合科技余经理7 小时前
海外版多语言团购系统架构:主数据互通与核销边界
java·开发语言·前端·后端·系统架构·php·ai编程
我变成萤火虫8 小时前
反悔贪心(经典题目讲解)
c++·算法·贪心算法·stl·排序算法·反悔贪心
_Narcissus_8 小时前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
Jesse_EC8 小时前
为什么我设置的 contentLength 到了消费端变成了 0?
java
vipxieliang8 小时前
ValidX 的 Date 和 DateTime vs JPA 的 Temporal 对比
java·后端
杜touch8 小时前
Spring框架的AnnotationConfigApplicationContext类启动的流程
java