Bootstrap

Leetcode238. 除自身以外数组的乘积(java实现)

今天分享的题目是letcode238. 除自身以外数组的乘积
先来看题目描述:
在这里插入图片描述
本道题我最先想到的是先乘积所有的元素,然后除以所有元素,但是本题无法使用除法。
本题的解题思路是使用前缀积。
拿nums[]={1,2,3,4};
先遍历前缀积,num[0]的1的前缀积为1,num[1],2的前缀积也是1,num[2],3的前缀积为2…,前缀积的[1,1,2,6];
再计算它的后缀积=[1,4,12,24],将前缀积和后缀积进行相乘即可得到目标数组。
result=[16,24,121,241]=[24,12,8,6];
具体代码实现:

 public int[] productExceptSelf(int[] nums) {
        int arr []=new int[nums.length];
        int arr1 [] =new int[nums.length];
        int pre = 1;
        //计算前缀积
        for (int i = 0; i < nums.length; i++) {
            arr[i]=pre;
            pre=pre*nums[i];
        }
        //计算后缀积
        int last = 1;
        for (int i =nums.length-1;i>=0;i--){
            arr1[i]=last;
            last=last*nums[i];
        }
        //得到目标数组
        for (int i = 0; i < nums.length; i++) {
            arr[i]=arr[i]*arr1[i];
        }


        return arr;
;