算法总结之 不包含本位置的累乘数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法总结之 不包含本位置的累乘数组相关的知识,希望对你有一定的参考价值。
给定一个整型数组arr,返回不包含本位置的乘数组
一般做法是用除法,新方法:
一个位置上 除去 自己值的累乘,就是自己左边的累乘再乘以自己右边的累乘,即 res[i]=lr[i-1]*rl[i+1]
最左的位置 和 最右的位置 比较特殊, 即 res[0]=rl[1] , res[N-1]=lr[N-2]
这样虽然可以得到结果,但是不好的是,用两个两个额外的数组,lr[] rl[], 如何避免呢? 通过res数组复用的方式。
具体看代码吧:
package TT; public class Test80 { public static int[] product(int[] arr){ if(arr==null || arr.length<2){ return null; } int[] res = new int[arr.length]; res[0]=arr[0]; for (int i = 1; i < arr.length; i++) { res[i]=res[i-1]*arr[i]; } int tmp = 1; for(int i = arr.length-1; i>0; i--){ res[i]=res[i-1]*tmp; tmp*=arr[i]; } res[0]=tmp; return res; } public static void main(String[] args){ int[] arr = new int[4]; arr[0]=2; arr[1]=3; arr[2]=1; arr[3]=4; int[] arr1 = product(arr); for(int i =0; i<arr.length; i++){ System.out.println(arr1[i]); } } }
以上是关于算法总结之 不包含本位置的累乘数组的主要内容,如果未能解决你的问题,请参考以下文章
《程序员代码面试指南》第八章 数组和矩阵问题 不包含本位置值的累乘数组
五种C程序计算阶乘方法 c语言实现1到n的阶乘1*2*3*.....*n的累乘计算,使用不同方法实现,五种计算阶乘的方法