题目:
已知一个包含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面试题1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。 PHP 使用了引用计数 (reference counting) GC 机制。 每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,...
腾讯面试题解析.pdf 本资源是一份详细的腾讯面试题解析文档,涵盖了 Android 面试题、网络基础、常用三方库、算法基础等多个方面的知识点。下面是对该文档的详细解析: 计算机基础面试题 在计算机基础面试题部分...
以下是一些具体的面试题及其解析: 1. 宏定义比较大小:`#define BIG_THAN(a, b) (((b) – (a)&(0x1))>>31)` 这个宏利用了二进制的位运算来比较两个数的大小。当a大于b时,b-a会产生负数,而负数的最高位(符号位)...
10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题10道腾讯的Java面试题
【腾讯Java面试题】 在Java领域,面试是评估求职者技术实力的重要环节,而腾讯作为中国互联网巨头之一,其Java面试题往往具有很高的参考价值。这些题目不仅涵盖基础语法、数据结构、算法、多线程、JVM优化等多个...
在腾讯的前端面试中,面试官可能会关注一系列关键知识点,这些知识点涵盖了前端开发的基础到进阶内容。以下是对这些知识点的详细解释: 1. **JSONP原理**:JSONP(JSON with Padding)是一种解决跨域数据获取的问题...
《腾讯面试题与笔试题详解》 在求职的道路上,面试和笔试是必不可少的环节,尤其是对于技术人才来说,能够顺利通过大公司的面试更是彰显个人实力的重要标志。本压缩包包含两份珍贵的资料——“腾讯笔试题专辑(含...
在IT行业中,尤其是在招聘领域,腾讯作为中国最大的互联网公司之一,其笔试和面试题往往备受关注。这些题目不仅反映了腾讯对技术人才的期待,也揭示了行业内的热门技术和招聘趋势。下面,我们将深入探讨腾讯笔试面试...
本资源“2022年最新(腾讯)前端面试题真题解析”汇聚了最新的腾讯前端面试题,旨在帮助求职者更好地准备面试,提升成功入职的可能性。 面试题的解析通常会涵盖以下几个关键领域: 1. **基础概念**:面试题会涉及...
腾讯系统工程师面试题 腾讯系统工程师面试题 腾讯系统工程师面试题
阿里面试20题 百度面试10题 华为面试10题 京东面试13题 腾讯面试37题 头条面试10题 项目经理面试常遇问题 经典面试题 程序员 IT经理 项目经理 面试题 研发经理 高级程序员 经典面试题
C++面试题笔试题 C语言 IQ智力面试题笔试题 JAVA笔试面试资料 NET面试题笔试题 web开发 数据库面试题笔试题 算法 数据结构 计算机基础 计算机网络 软件测试 ava工程师面试题大全-100%公司笔试题你都能碰到几个.docx ...
腾讯近年来笔试面试题合集 包括校园招聘与实习生招聘 主要是技术类
【腾讯09年测试面试题解析】 面试题1:QQ登陆号码边界值测试有哪些 边界值测试是一种重要的软件测试方法,主要针对输入或输出范围的边界条件进行测试。对于QQ登录号码,边界值可能包括最小值(如0,因为QQ号通常从0...
网盘下载pdf文件,包括常见前端面试题汇总,百度、阿里、腾讯校招面试题汇总,网盘下载pdf文件,65个文件
在IT行业的求职过程中,华为和腾讯...总的来说,华为和腾讯的测试面试题涵盖的范围广泛,既要求扎实的专业技能,又看重解决问题和适应企业环境的能力。通过全面的准备和持续的学习,相信你能成功应对这样的面试挑战。
【腾讯2013面试题】相关知识点解析 在IT行业,面试是评估候选人技能、经验和潜力的关键环节,尤其对于大型科技公司如腾讯而言。2013年的腾讯面试题,反映了当时的行业趋势和技术热点,同时也揭示了腾讯对人才的需求...
2016年腾讯校招面试题,主要是问答题和选择题,内容丰富
这道2011年腾讯校招的面试题虽然没有明确的问题描述,但从标签中我们可以推测,它可能涉及C++、.NET、Java这三种编程语言中的某一方面,或者是关于算法设计与分析。面试题通常旨在考察候选人的思维能力、编程基础...