前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer的学习笔记(C#篇)-- 构建乘积数组

剑指Offer的学习笔记(C#篇)-- 构建乘积数组

作者头像
WeiMLing
发布2019-08-23 19:42:54
3030
发布2019-08-23 19:42:54
举报
文章被收录于专栏:WeiMLing

题目描述

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。

一 . 题目解析

简而言之,给你一个数组,返回一个数组,返回的数组内容不包含A[i],注意题目中红色部分。也就是说,你返回的这个数组B,他的每一项都是数组A中除了A[i]之外内容的乘积。

二 . 解题过程

思想是这样的:看下图,B0 = A1*A2*A3*……An-1;(无A0)

B1 = A0*A2*A3*……An-1;(无A1)

----

Bn-1 = A0*A2*A3*……An-2;(无An-1)

这个时候呢,看下图,我们就把B0至Bn-1都表示出来了;表面上看上去不是很难,但是如何用代码实现呢,这样,因为B上的每一个元素都是不含B[i]的连乘,如果B中每个数都等于Bi =(A0*A1*A2*……An-1)/(Ai),是不是很方便呢,but!!题目要求不让用除法,但是不用除法,这个Ai不好摘出来,所以,这时候,看下图,把灰色部分当成分界线,再使用连乘,就变成了左右两部分,然后最后左右再相乘,就实现了我们的目标,具体看代码,更加直观,(我现在在吃包子,之前吃了一个冰激凌,好腻啊!!)

二 . 代码实现

代码语言:javascript
复制
class Solution
{
    public int[] multiply(int[] A)
    {
        // write code here
        //定义数组A的长度为n
        int n = A.Length;
        //定义一个新的数组B
        int [] B = new int [n];
        //设置B[0]为1
        B[0] = 1 ;
        //创建左循环
        for(int i=1 ; i<n ; i++)
        {
            B[i] = B[i-1]*A[i-1];
        }
        //创建右循环
        int x = 1;
        for(int i = n - 2; i >= 0; i--)
        {
            x = x * A[i+1];
            B[i] *= x;
        }
        //得出新数组B
        return B;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
      • 一 . 题目解析
        • 二 . 解题过程
          • 二 . 代码实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档