构建乘积数组 (主思路B[i]=lf[i]*rt[n-1-i])——Yuanjrah

构建乘积数组

http://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46

/*
*Author@Yuanjrah
*利用两个数组保存i位置左右两侧所有元素乘积,然后B[i]等于i位置左侧乘积 * 右侧乘积,
*初始化0位置左侧乘积为1,n-1位置右侧乘积为1
*1.定义数组lf和rt

  • lf[i]用来存放A数组左侧A[0] * A[1] * ...*A[i-1],初始化lf[0]=1
  • rt[i]存放A数组右侧A[n-1] * A[n-2] * ...*A[i+1],初始化rt[0]=1
  • 2.B[i] = lf[i] * rt[n-1-i]
  • B[0] = lf[0] * rt[n-1] = 1 * 1 * A[n-1] * A[n-2] *... * A[1]
  • B[1] = lf[1] * rt[n-2] = 1 * A[0] * 1 * A[n-1] * A[n-2] *... *A[2]
  • B[n-1] = lf[n-1] * rt[0] = 1 * A[0] * A[1] *... * A[n-2] * 1
  • /
    class Solution {
    public:
       vector<int> multiply(const vector<int>& A) {
           vector<int>ans;//结果
           vector<int>lf, rt;//左侧乘积,右侧乘积
           int len=A.size();
           int digit_lf=1,digit_rt=1;
           for(int i=0;i<len;i++){
               //便于计算B[0],B[n-1]
               //B[0]=lf[0]*rt[n-1]
               lf.push_back(digit_lf);//lf[0]=1
               rt.push_back(digit_rt);//rt[0]=1
               digit_lf*=A[i];
               digit_rt*=A[len-1-i];//A数组倒数第i+1位
           }
           for(int i=0;i<len;i++){
               ans.push_back(lf[i]*rt[len-1-i]);
           }
           return ans;
       }
    };
全部评论

相关推荐

最近又搬回宿舍了,在工位坐不住,写一写秋招起伏不断的心态变化,也算对自己心态的一些思考表演式学习从开始为实习准备的时候就特别焦虑,楼主一开始选择的是cpp后端,但是24届这个方向已经炸了,同时自己又因为本科非92且非科班,所以感到机会更加迷茫。在某天晚上用java写出hello&nbsp;world并失眠一整晚后选择老本行干嵌入式。理想是美好的,现实情况是每天忙但又没有实质性进展,总是在配环境,调工具,顺带还要推科研。而这时候才发现自己一直在表演式学习,徘徊在设想如何展开工作的循环里,导致没有实质性进展。现在看来当时如果把精力专注在动手写而不是两只手端着看教程,基本功或许不会那么差。实习的焦虑5月,楼主...
耶比:哲学上有一个问题,玛丽的房间:玛丽知道眼睛识别色彩的原理知道各种颜色,但是她生活在黑白的房间里,直到有一天玛丽的房门打开了她亲眼看到了颜色,才知道什么是色彩。我现在最大可能的减少对非工作事情的思考,如果有一件事困扰了我, 能解决的我就直接做(去哪里或者和谁吵架等等……),解决不了的我就不想了,每一天都是最年轻的一天,珍惜今天吧
投递比亚迪等公司10个岗位 > 秋招被确诊为…… 牛客创作赏金赛
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务