`
qiemengdao
  • 浏览: 276502 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

腾讯的一道面试题—不用除法求数字乘积

 
阅读更多

题目:

已知一个包含N个元素的数组A[N],试求出这样一个数组OUTPUT[N],其中OUTPUT[I]的值为数组A中除了A[i]的其他所有元素的乘积。注意,不能使用除法。时间复杂度必须为O(N)。

例如OUTPUT[0]的值为A[1]*A[2]...A[N], OUTPUT[1]的值为A[0]*A[2]...A[N]。

假定数组A={4, 3, 2, 1, 2},则OUTPUT={12, 16, 24, 48, 24}。


分析:

初看此题,觉得很无聊,这个题目貌似没有什么意义。要是可以用除法,直接OUTPUT[I]=A[0]*A[1]...A[N]/A[i]。

但是不能用除法,而且时间复杂度为O(N),确实一时还难以想到好的解法。如果使用暴力方法,每次求OUTPUT[I]都暴力计算一遍,那么时间复杂度为O(N^2),达不到O(N)的要求。

我们可以定义一个数组B,其中元素B[i]的值为A[0]到A[i]的乘积,即B[i]=A[0]*A[1]...A[i]。假如A = {4, 3, 2, 1, 2},则B = {4, 12, 24, 24, 48}。然后从右向左扫描数组A,并使用一个变量product记录从右向左扫描到当前位置的乘积。从而OUTPUT[i]=B[i-1]*product.

上面的方法采用O(N)的时间和O(N)的空间,那么是否还有更好的办法呢?是否能省去这O(N)的空间呢?

确实是的,这O(N)的空间确实可以省去。我们使用2个变量就可以满足要求。使用变量left保存从左向右扫描数组A的乘积,使用变量right保存从右向左扫描数组A的乘积。


代码:

void array_multiplication(int A[], int OUTPUT[], int n) 
{
  int left = 1;
  int right = 1;
  for (int i = 0; i < n; i++)
    OUTPUT[i] = 1;
  for (int i = 0; i < n; i++) {
    OUTPUT[i] *= left;
    OUTPUT[n - 1 - i] *= right;
    left *= A[i];
    right *= A[n - 1 - i];
  }
}


分享到:
评论

相关推荐

    腾讯PHP面试题_腾讯php面试题_

    最新腾讯PHP面试题1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。 PHP 使用了引用计数 (reference counting) GC 机制。 每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,...

    腾讯面试题解析.pdf

    腾讯面试题解析.pdf 本资源是一份详细的腾讯面试题解析文档,涵盖了 Android 面试题、网络基础、常用三方库、算法基础等多个方面的知识点。下面是对该文档的详细解析: 计算机基础面试题 在计算机基础面试题部分...

    腾讯历年面试试题汇总

    以下是一些具体的面试题及其解析: 1. 宏定义比较大小:`#define BIG_THAN(a, b) (((b) – (a)&(0x1))&gt;&gt;31)` 这个宏利用了二进制的位运算来比较两个数的大小。当a大于b时,b-a会产生负数,而负数的最高位(符号位)...

    10道腾讯的Java面试题

    10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题

    腾讯Java面试题

    【腾讯Java面试题】 在Java领域,面试是评估求职者技术实力的重要环节,而腾讯作为中国互联网巨头之一,其Java面试题往往具有很高的参考价值。这些题目不仅涵盖基础语法、数据结构、算法、多线程、JVM优化等多个...

    腾讯前端面试题

    在腾讯的前端面试中,面试官可能会关注一系列关键知识点,这些知识点涵盖了前端开发的基础到进阶内容。以下是对这些知识点的详细解释: 1. **JSONP原理**:JSONP(JSON with Padding)是一种解决跨域数据获取的问题...

    腾讯面试题 + 笔试题(全)

    《腾讯面试题与笔试题详解》 在求职的道路上,面试和笔试是必不可少的环节,尤其是对于技术人才来说,能够顺利通过大公司的面试更是彰显个人实力的重要标志。本压缩包包含两份珍贵的资料——“腾讯笔试题专辑(含...

    腾讯笔试面试题汇总

    在IT行业中,尤其是在招聘领域,腾讯作为中国最大的互联网公司之一,其笔试和面试题往往备受关注。这些题目不仅反映了腾讯对技术人才的期待,也揭示了行业内的热门技术和招聘趋势。下面,我们将深入探讨腾讯笔试面试...

    2022年最新(腾讯)前端面试题真题解析

    本资源“2022年最新(腾讯)前端面试题真题解析”汇聚了最新的腾讯前端面试题,旨在帮助求职者更好地准备面试,提升成功入职的可能性。 面试题的解析通常会涵盖以下几个关键领域: 1. **基础概念**:面试题会涉及...

    腾讯系统工程师面试题

    腾讯系统工程师面试题 腾讯系统工程师面试题 腾讯系统工程师面试题

    阿里面试题 腾讯面试题 百度面试题 华为面试题 京东面试题 头条面试题 经典面试题 程序员 IT经理 项目经理 面试题

    阿里面试20题 百度面试10题 华为面试10题 京东面试13题 腾讯面试37题 头条面试10题 项目经理面试常遇问题 经典面试题 程序员 IT经理 项目经理 面试题 研发经理 高级程序员 经典面试题

    互联网校招题库资料笔试面试真题具体面试问题回答技巧腾讯阿里培训资料.zip

    C++面试题笔试题 C语言 IQ智力面试题笔试题 JAVA笔试面试资料 NET面试题笔试题 web开发 数据库面试题笔试题 算法 数据结构 计算机基础 计算机网络 软件测试 ava工程师面试题大全-100%公司笔试题你都能碰到几个.docx ...

    腾讯笔试面试题

    腾讯近年来笔试面试题合集 包括校园招聘与实习生招聘 主要是技术类

    腾讯09年测试面试题(亲身经历)

    【腾讯09年测试面试题解析】 面试题1:QQ登陆号码边界值测试有哪些 边界值测试是一种重要的软件测试方法,主要针对输入或输出范围的边界条件进行测试。对于QQ登录号码,边界值可能包括最小值(如0,因为QQ号通常从0...

    前端面试题(包括百度阿里腾讯面试题).txt

    网盘下载pdf文件,包括常见前端面试题汇总,百度、阿里、腾讯校招面试题汇总,网盘下载pdf文件,65个文件

    华为 腾讯 测试面试题 面试技巧

    在IT行业的求职过程中,华为和腾讯...总的来说,华为和腾讯的测试面试题涵盖的范围广泛,既要求扎实的专业技能,又看重解决问题和适应企业环境的能力。通过全面的准备和持续的学习,相信你能成功应对这样的面试挑战。

    腾讯2013面试题

    【腾讯2013面试题】相关知识点解析 在IT行业,面试是评估候选人技能、经验和潜力的关键环节,尤其对于大型科技公司如腾讯而言。2013年的腾讯面试题,反映了当时的行业趋势和技术热点,同时也揭示了腾讯对人才的需求...

    腾讯校招面试题

    2016年腾讯校招面试题,主要是问答题和选择题,内容丰富

    一道腾讯面试题

    这道2011年腾讯校招的面试题虽然没有明确的问题描述,但从标签中我们可以推测,它可能涉及C++、.NET、Java这三种编程语言中的某一方面,或者是关于算法设计与分析。面试题通常旨在考察候选人的思维能力、编程基础...

Global site tag (gtag.js) - Google Analytics