LeetCode0238.除自身以外数组的乘积

题目要求

 

 

算法分析

如果不限制使用除法,

res[n] = nums[0] * nums[1] * .....* nums[nums.Lenght-1] / nums[n];

由于限制除法

res[n] = nums[0] * nums[1] *....* nums[n-1] * nums[n+1] * num[n+2] * ......* nums[nums.Lenght-1];

可以用两个数组分别存储n取不同值时 nums[0] * nums[1] *....* nums[n-1]  和 nums[n+1] * num[n+2] * ......* nums[nums.Lenght-1] 这两组信息

即,从左向右的累乘结果,以及从右向左的累乘结果。

求res[n]时,则用 left[n-1] * right[n+1]即可得。

另外需要考虑n处于最左端和最右端时的边界情况。

代码展示(C#)

public class Solution {
    public int[] ProductExceptSelf(int[] nums) {
        int[] l = new int[nums.Length];
        int[] r = new int[nums.Length];

        l[0] = nums[0];
        r[nums.Length-1] = nums[nums.Length-1]; 

        for(int i = 1; i < nums.Length; i++){
            l[i] = l[i-1]*nums[i];
        }
        for(int i = nums.Length - 2; i >=0 ; i--){
            r[i] = r[i+1]*nums[i];
        }
        nums[0] = r[1];
        nums[nums.Length-1] = l[nums.Length-2];
        for(int i = 1; i < nums.Length-1; i++){
            nums[i] = l[i-1] * r[i+1];
        }

        return nums;
    }
}

 

提交结果

 

posted on 2020-06-04 22:32  King__R  阅读(112)  评论(0)    收藏  举报