资讯动态

普通数组-238. 除了自身以外数组的乘积(数组、前缀和)

发布时间:2026/8/23 5:31:27 来源:尧图企业网站定制
文章目录一、核心解题思路二、完整可运行代码大厂机考版力扣地址 中等238. 除了自身以外数组的乘积挺简单的一、核心解题思路前缀积数组prefixprefix[i]表示nums[0..i-1]所有元素的乘积即i位置左边所有元素的乘积后缀积数组suffixsuffix[i]表示nums[i1..n-1]所有元素的乘积即i位置右边所有元素的乘积结果数组answeranswer[i] prefix[i] * suffix[i]即左右两边乘积的组合完美避开除法时间复杂度 O (n)空间复杂度 O (n)classSolution{publicint[]productExceptSelf(int[]nums){intnnums.length;int[]prefixnewint[n];prefix[0]1;for(inti1;in;i){prefix[i]prefix[i-1]*nums[i-1];}int[]postfixnewint[n];postfix[n-1]1;for(intin-2;i0;i--){postfix[i]postfix[i1]*nums[i1];}int[]resnewint[n];for(inti0;in;i){res[i]prefix[i]*postfix[i];}returnres;}}二、完整可运行代码大厂机考版importjava.util.Scanner;publicclassMain{publicstaticint[]productExceptSelf(int[]nums){intnnums.length;// 1. 初始化前缀积数组prefix[i] nums[0] * nums[1] * ... * nums[i-1]int[]prefixnewint[n];prefix[0]1;// 第一个元素左边没有元素乘积为1for(inti1;in;i){prefix[i]prefix[i-1]*nums[i-1];}// 2. 初始化后缀积数组postfix[i] nums[i1] * nums[i2] * ... * nums[n-1]int[]postfixnewint[n];postfix[n-1]1;// 最后一个元素右边没有元素乘积为1for(intin-2;i0;i--){postfix[i]postfix[i1]*nums[i1];}// 3. 计算最终结果左右乘积相乘int[]resnewint[n];for(inti0;in;i){res[i]prefix[i]*postfix[i];}returnres;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);// 读取数组长度intnsc.nextInt();int[]numsnewint[n];// 读取数组元素for(inti0;in;i){nums[i]sc.nextInt();}// 输出结果for(inti:productExceptSelf(nums)){System.out.print(i );}}}

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价