算法总结之 不包含本位置的累乘数组
给定一个整型数组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]); } } }