互联网高频算法面试题-构建乘积数组

2021 年 11 月 24 日 极市平台
↑ 点击 蓝字  关注极市平台

作者丨Dine
来源丨程序员小熊
编辑丨极市平台

极市导读

 

今天带来一道与数组相关的面试高频题,这道题在半年内被字节、微软和亚马逊等互联网大厂作为面试题考过,即力扣上的第 238 题-除自身以外数组的乘积和剑指 Offer 66 题-构建乘积数组。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

前言

今天带来一道与数组相关的面试高频题,这道题在半年内被字节微软亚马逊等互联网大厂作为面试题考过,即力扣上的第 238 题-除自身以外数组的乘积和剑指 Offer 66 题-构建乘积数组。

构建乘积数组

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],

其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积,

即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。

示例及提示

解题思路

本题最容易想到的方法:将数组元素都相乘,再将乘积除以原数组的每一个元素,即可得到构建后乘积数组中每个元素的值。

由于数组中的元素可能为 0,会有除 0 的风险,且本题要求不能使用除法,所以该方法不可行。

要求构建乘积数组后某下标对应元素的值,可以考虑分别求出该下标对应左边(不含该下标)元素的乘积其右边的元素的乘积,最后将两个乘积再相乘即可。

举例

以 nums = [1,2,3,4]为例,如下图示。

例子

要求除下标为 2 以外的元素的积

求除下标为 2 以外的元素的积

先求下标为 2 左侧元素的乘积;

下标为 2 左侧元素的积

再求下标为 2 右侧元素的乘积(只有一个元素 4);

所以除下标为 2 以外的元素的积为左侧乘积 * 右侧乘积

最终计算结果

nums = [1,2,3,4] 的完整求解过程,如下动图所示。

完整求解过程

Show me the Code

C

int* constructArr(int* a, int aSize, int* returnSize){  
    if (a == NULL || aSize < 2) {  
        *returnSize = 0;  
        return a;  
    }  

    int *res = (int *)malloc(aSize * sizeof(int));  
    if (res == NULL ) {  
        *returnSize = 0;  
        return res;  
    }  
      
    memset(res, 0, aSize * sizeof(int));  
    *returnSize = aSize;  
      
    /* 左侧乘积 */  
    for (int i = 0, product = 1; i < aSize; product *= a[i], i++) {  
        res[i] = product;  
    }  
      
    /* 左侧乘积乘以右侧乘积 */  
    for (int i = aSize - 1, product = 1; i >= 0; product *= a[i], i--) {  
        res[i] *= product;    
    }  
      
    return res;  

}  

C++

vector<int> constructArr(vector<int>& a) {  
    int len = a.size();  
    if (len == 0) {  
        return {};  
    }  

    vector<int> res(len, 1);  
    for (int i = 0, product = 1; i < len; product *= a[i], i++) {  
        res[i] = product;  
    }  
      
    for (int i = len - 1, product = 1; i >= 0; product *= a[i], i--) {  
        res[i] *= product;    
    }  
      
    return res;  


Java

int[] constructArr(int[] a) {  
    int len = a.length;  
    int[] res = new int[len];  
    for (int i = 0, product = 1; i < len; product *= a[i], i++) {  
        res[i] = product;  
    }  
      

    for (int i = len - 1, product = 1; i >= 0; product *= a[i], i--) {  
        res[i] *= product;    
    }  
      
    return res;  

}

复杂度分析

时间复杂度:O(n),其中 n 是数组的长度。

空间复杂度:O(1)

如果觉得有用,就请分享到朋友圈吧!

△点击卡片关注极市平台,获取 最新CV干货

公众号后台回复“transformer”获取最新Transformer综述论文下载~


极市干货
课程/比赛: 珠港澳人工智能算法大赛 保姆级零基础人工智能教程
算法trick 目标检测比赛中的tricks集锦 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks
技术综述: 一文弄懂各种loss function 工业图像异常检测最新研究总结(2019-2020)


CV技术社群邀请函 #

△长按添加极市小助手
添加极市小助手微信(ID : cvmart4)

备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)


即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群


每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~



觉得有用麻烦给个在看啦~   
登录查看更多
0

相关内容

面试是招聘、招生等的一个常见程序,指通过面谈来了解并评估应试者,来确定是否符合要求。
【CVPR2022】多机器人协同主动建图算法
专知会员服务
46+阅读 · 2022年4月3日
EMNLP 2021 | 预训练跨语言模型中的大词表构建及使用
专知会员服务
20+阅读 · 2022年1月5日
【干货书】Python科学编程,451页pdf
专知会员服务
126+阅读 · 2021年6月27日
专知会员服务
70+阅读 · 2021年5月11日
专知会员服务
75+阅读 · 2021年3月16日
【干货书】利用 Python 进行数据分析,470页pdf
专知会员服务
109+阅读 · 2021年3月13日
专知会员服务
25+阅读 · 2021年3月7日
专知会员服务
38+阅读 · 2020年9月6日
【推荐系统/计算广告/机器学习/CTR预估资料汇总】
专知会员服务
86+阅读 · 2019年10月21日
互联网算法面试题之旋转链表
极市平台
0+阅读 · 2021年11月25日
谈中小企业算法岗面试
极市平台
1+阅读 · 2021年10月29日
面经 | 算法工程师面试题汇总
极市平台
12+阅读 · 2019年10月14日
今日头条广告算法面经!
算法与数据结构
25+阅读 · 2019年5月29日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Xgboost算法——Kaggle案例
R语言中文社区
13+阅读 · 2018年3月13日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
5+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Arxiv
0+阅读 · 2022年4月20日
Arxiv
0+阅读 · 2022年4月20日
Arxiv
0+阅读 · 2022年4月19日
Arxiv
0+阅读 · 2022年4月16日
Arxiv
0+阅读 · 2022年4月15日
Arxiv
17+阅读 · 2022年1月11日
VIP会员
相关VIP内容
【CVPR2022】多机器人协同主动建图算法
专知会员服务
46+阅读 · 2022年4月3日
EMNLP 2021 | 预训练跨语言模型中的大词表构建及使用
专知会员服务
20+阅读 · 2022年1月5日
【干货书】Python科学编程,451页pdf
专知会员服务
126+阅读 · 2021年6月27日
专知会员服务
70+阅读 · 2021年5月11日
专知会员服务
75+阅读 · 2021年3月16日
【干货书】利用 Python 进行数据分析,470页pdf
专知会员服务
109+阅读 · 2021年3月13日
专知会员服务
25+阅读 · 2021年3月7日
专知会员服务
38+阅读 · 2020年9月6日
【推荐系统/计算广告/机器学习/CTR预估资料汇总】
专知会员服务
86+阅读 · 2019年10月21日
相关资讯
互联网算法面试题之旋转链表
极市平台
0+阅读 · 2021年11月25日
谈中小企业算法岗面试
极市平台
1+阅读 · 2021年10月29日
面经 | 算法工程师面试题汇总
极市平台
12+阅读 · 2019年10月14日
今日头条广告算法面经!
算法与数据结构
25+阅读 · 2019年5月29日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Xgboost算法——Kaggle案例
R语言中文社区
13+阅读 · 2018年3月13日
相关基金
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
5+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Top
微信扫码咨询专知VIP会员