`
haitaoandroid
  • 浏览: 27458 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一道笔试题的思考(二)

 
阅读更多

题目:给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法: 要求O(1)空间复杂度和O(n)的时间复杂度; 除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等); 请用程序(主流编程语言任选)实现并简单描述。在考试的时候我是没想出来,回来查了一下资料,自己实现了一下,原来就是一个想法,把这个数组的前半部分乘积保存在b,即b[i]=a[0]*a[1]*...a[i],后半部分乘积保存a,a[i]=a[i]*a[i+1]*.....a[n-1],然后求最终数组时,把b[i]=b[i-1]*a[i+1];明白这个思想,代码就比较好写了,注意一下边界就行了:

	public static void main(String[] args) {  
		int[] a = {3,4,2,5,7,6,1};
		int[] b = {1,1,1,1,1,1,1};
		//b是前半截数组
		for(int i=0;i<a.length;i++){
			if(i!=0)b[i]=b[i-1];
			b[i]*=a[i];
		}
		//a是后半截数组
		for(int i=a.length-1;i>=0;i--){
			if(i==a.length-1)a[i]=a[i];
			else
				a[i]*=a[i+1];
		}
		//前半截×后半截=最终的数组
		for(int i=0;i<a.length;i++){
			if(i==0)a[i]=a[i+1];
			else if(i==a.length-1) 
					a[i]=b[a.length-2];
			else
				a[i]=b[i-1]*a[i+1];
		}
		print(a);//输出1680 1260 2520 1008 720 840 5040
		
    }  

考完这个题目后我一直在想的一个问题不是这个题目怎么做,而是让我联想到除法比乘法慢的问题,移位操作是所有操作中最慢的,很容易理解,计算机是以0和1表示数据的,移位操作花费的时钟周期是最短的。引用的第二篇文章讲的很好,可以一看。文章中提醒了我一点:i=2<<3的字节码会是什么?以前以为会是先把2放入栈顶,然后再移位什么的,但是错了,编译乘字节码之后是:bipush 16。也就是说在编译期间就已经把2<<3算出来了。因此i=2<<3和i=2×8的效率在执行期间是一样的,如果是下面的代码:

int i = 2;

int j = i * 8;

编译后字节码是:

但是如果是下面的代码:

int i = 2;

int j = i <<3;

编译后:



这也是我们知道的,常量计算会在编译器就算出来,即不管是i=2<<3还是i=2*8,右边的常量都是在编译期间已经算出来,但是如果是j=i*8和j=i<<3这种情况,j=i<<3可能会更快一点,毕竟是位运算,至于快多少,我不确定。下面是文中给出的各指令所需的时钟周期:


这样看来除法比乘法也慢不了多少.....纠结~



参考:

http://lotusroots.bokee.com/5886635.html

拾谈“用最有效率的方法算出2乘以8等於几?:http://blog.csdn.net/kypfos/article/details/810151


分享到:
评论

相关推荐

    004m金蝶软件测试笔试题回忆版

    ### 004m金蝶软件测试笔试题知识点解析 #### 一、综合类知识点 **1. 职业倾向测试** - **知识点概述**:这类题目旨在评估应试者的个人兴趣、价值观以及性格特点等,从而判断其是否适合从事特定的职业。常见的职业...

    菜鸟的自我修炼——阿里巴巴一道笔试题浅谈

    一道简单的笔试题可能就是对这些基础知识的直接考察。 2. **面向对象**:Java是一种面向对象的语言,因此对类、对象、继承、封装和多态的理解至关重要。笔试题可能会设计一个简单的类结构,要求你实现特定功能或者...

    2019南京帆软软件公司校园招聘研发类笔试题

    【标题】"2019南京帆软软件公司校园招聘研发类笔试题"涉及的知识点主要涵盖逻辑推理、算法和代码编写三个方面。帆软软件公司作为一家专注于数据分析和商业智能的公司,其研发岗位的笔试题往往侧重于考察应聘者的基础...

    2012谷歌笔试题

    谷歌笔试题很可能会包含一系列复杂度分析、排序算法(如快速排序、归并排序)、查找算法(如二分查找)、链表操作、树和图的遍历等问题。例如,一道典型的题目可能是要求实现一个高效的数据结构来存储和查询大量数据...

    C++笔试题集锦

    《C++笔试题集锦》是一本专门为C++编程爱好...每一道题目的解答都能引导读者深入思考C++语言的特性和设计哲学,从而在编程实践中游刃有余。因此,无论是准备面试还是自我提升,这本书都是C++学习者不可或缺的参考资料。

    微软笔试题总结 推理题 计算题

    【微软笔试题】通常用于测试应聘者的逻辑推理、问题解决和计算能力,这些能力在IT行业中至关重要。以下是对几个典型题目的分析: 1. **金条分段问题**:这是一道逻辑推理题,考察的是如何在有限的操作次数内公平...

    阿里巴巴校园招聘笔试试题(java).doc

    2. 逻辑推理:如肯尼迪总统的讲话例子,这是一道逻辑推理题,要求找出肯尼迪言论的前提假设,考察的是考生对逻辑关系的理解和分析能力。 3. 专利意识:提到中国企业在专利工作上的不足,这是对企业知识产权保护意识...

    微软2015招聘笔试题

    【标题】"微软2015招聘笔试题"揭示了微软公司在2015年度针对求职者进行的技术筛选过程,这种笔试通常包含了编程、算法、系统设计、逻辑推理等多种技术领域的题目,旨在评估应聘者的综合技能和问题解决能力。...

    广东移动2012暑期实习生招聘笔试题.pdf

    这是一道开放性问题,考察应聘者的财务规划、市场分析和逻辑思考能力。 #### 二、具体题型解析 ##### 1. 数字推理题 这类题目要求考生根据给定的数字关系找出隐藏的规律或计算未知值。例如,“感动广东移动是0-9...

    腾讯 招聘 笔试题 逻辑思维题

    例如,你可能需要解决一道关于条件语句、循环逻辑或算法设计的问题,这都需要清晰的逻辑思考。此外,在系统设计和项目管理中,良好的逻辑推理能力有助于构建合理的工作流程和解决复杂问题。 3. **填空题**: 填空...

    求职圣经:笔试常用逻辑思考题

    【笔试中的逻辑思考题解析】 在求职过程中,逻辑思考题是许多企业用来评估应聘者思维敏捷度和逻辑推理能力的重要工具。这些题目通常涉及到数学、逻辑推理、问题解决等多种元素,要求应聘者在有限时间内找到正确答案...

    腾讯的笔试附加题(ACM试题)

    这是一道腾讯公司笔试中的附加题,原题来源于ACM(国际大学生程序设计竞赛)的一个问题。题目要求求解一个矩阵中最长递减路径的长度。该题目不仅考察了候选人的编程能力,还考察了解决复杂算法问题的能力。 ### ...

    0-交通银行历年笔试真题(12-15年).zip

    交通银行是中国五大国有商业银行之一...总之,这份压缩包中的历年真题资源是备考交通银行笔试的宝贵材料,考生应当充分利用,结合其他教材和模拟题进行全面而深入的复习,以期在笔试中取得优异成绩,成功进入交通银行。

    华为校招硬件岗,电源岗笔试题8套

    ### 华为校招硬件岗,电源岗笔试题解析 #### 题目1:压敏电阻选型原则 **题目描述**:压敏电阻选型需满足:压敏电压 \(U_c &gt;\) 最大持续工作电压 \(U_{max} &gt;\) 额定工作电压 \(U_n\);绝不允许 \(U_c\) 低于被...

    百度校园招聘笔试试题-未知年份岗位.doc

    1. **逻辑推理**:试题中提到的字母序列O,T,T,F的问题,这是一道逻辑推理题,考察的是对模式识别和规律分析的能力,通常在软件开发面试中会出现类似的逻辑思维测试。 2. **数学问题**:16个数字填入16格方框的问题...

    中外名企面试笔试智力题大搜罗

    11. **Intel笔试题**: - 船相遇问题:两艘船会在出发地相遇,因为它们各自都在向对方的出发地前进,所以会相遇一次。 - 巴拿赫出生年份问题:设出生年份为x,则x^2 = x + 1945,解这个方程即可找到出生年份。 12...

    微软笔试面试整理题.txt

    同时,了解并练习一些基础的算法题,如排序算法(快速排序、归并排序等)、查找算法(二分查找等)等。 ### 智力题目 智力题目通常包含逻辑推理、数学计算、图形识别等内容。这类题目考验应聘者的逻辑思维能力和...

    中国移动2019招聘笔试完整真题及答案解析.pdf

    另一道题目谈到发展步伐与系统稳定及市场需求的关系,提示考生在考虑发展战略时,既要稳健前行,又不能过分保守,避免错失战略良机。正确选项为“B.固然保守”,意味着考生在答题时需要展现出对发展策略的辩证思考...

    2000-2009二级C笔试题目

    这里我们关注的是“2000-2009二级C笔试题目”,这是一份针对全国计算机等级考试二级C语言部分的历年真题集。这份资料对于备考者来说具有极高的价值,因为它提供了丰富的实践题目,帮助考生熟悉考试的格式和难度,...

Global site tag (gtag.js) - Google Analytics