[Java][Leetcode middle] 238. 除自身以外数组的乘积

第一个想法是:

想求出所有元素乘积,然后除以i对应的元素本书;这个想法是完全错误的:

  1. nums[I] 可能有0
  2. 题目要求了不能用除法

第二个想法是:

其实写之前就知道会超时,但是我什么都做不到啊!

双重循环,O(n2)

第三个做法: 借助辅助数组,官方题解

借助辅助数组:使用L[i],R[i],分别记录i左边和右边元素的乘积

那么res[I],就是L[I]*R[i]

java 复制代码
public int[] productExceptSelf2(int[] nums) {
        int len = nums.length;
        int[] result = new int[len];

        int[] R = new int[len]; //  the right of i: multiply
        int[] L = new int[len]; // the left of i: multiply

        L[0] = 1;
        R[len - 1] = 1;
        for (int i = 1; i < len; i++) {
            L[i] = L[i - 1] * nums[i - 1];
        }
        for (int i = len - 2; i >= 0; i--) {
            R[i] = R[i + 1] * nums[i + 1];
        }

        for (int i = 0; i < len; i++) {
            result[i] = L[i] * R[i];
        }
        return result;
    }
}

做法四:先用result[]代替上文的L[]

java 复制代码
    public int[] productExceptSelf3(int[] nums) {
        int len = nums.length;
        int[] result = new int[len];

        result[0] = 1;
        for (int i = 1; i < len; i++) {
            result[i] = result[i - 1] * nums[i - 1];
        }

        int R = 1;
        for(int i = len-1 ; i >= 0 ; i--) {
            result[i] = R * result[i];

            R *= nums[i];
        }

        return result;
    }
相关推荐
夜郎king12 小时前
基于 Java 实现数九天精准计算:从节气算法到工程化落地
java·开发语言
新缸中之脑12 小时前
Nanobot:轻量级OpenClaw
java·运维·网络
悟能不能悟13 小时前
java.sql.SQLSyntaxErrorException: ORA-01031: insufficient privileges
java·开发语言
马猴烧酒.13 小时前
【DDD重构|第十三天】DDD 领域驱动设计详解+实战
java·jvm·ide·重构·tomcat·maven·团队开发
烧烧的酒0.o13 小时前
Java——JavaSE完整教程
java·开发语言·学习
鹏哥哥啊Aaaa13 小时前
15.idea启动报错
java·ide·intellij-idea
super_lzb13 小时前
VUE 请求代理地址localhost报错[HPM] Error occurred while trying to proxy request
java·spring·vue·springboot·vue报错
Dream_sky分享13 小时前
IDEA 2025中TODO找不到
java·ide·intellij-idea
苏渡苇13 小时前
用 Spring Boot 项目给工厂装“遥控器”:一行 API 控制现场设备!
java·人工智能·spring boot·后端·网络协议·边缘计算
伊甸313 小时前
基于LangChain4j从0到1搭建自己的的AI智能体并部署上线-1
java·langchain·prompt