普通数组-238. 除了自身以外数组的乘积(数组、前缀和)
文章目录一、核心解题思路二、完整可运行代码大厂机考版力扣地址 中等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 );}}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2511423.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!