首页 > 编程语言 > 详细

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

时间:2020-06-04 23:36:50      阅读:54      评论:0      收藏:0      [点我收藏+]

题目要求

技术分享图片

 

 

算法分析

如果不限制使用除法,

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;
    }
}

 

提交结果

技术分享图片

 

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

原文:https://www.cnblogs.com/KingR/p/13046947.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!