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

第一个想法是:

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

  1. numsI 可能有0
  2. 题目要求了不能用除法

第二个想法是:

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

双重循环,O(n2)

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

借助辅助数组:使用Li,Ri,分别记录i左边和右边元素的乘积

那么resI,就是LI*Ri

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;
    }
相关推荐
用户3126874877203 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang3 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing3 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活3 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
alphaTao5 小时前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
lhldsg5 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售
Interview Aid1125 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
mldong5 小时前
换了工作流引擎,前端一行代码没改
java·架构
微尘寒风13 小时前
【Git】的安装和使用
java·git
y = xⁿ13 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习