`
sunxg
  • 浏览: 13759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Javascript面试问题整理

 
阅读更多
1. 给定一个字符串,判断其是否超长,其中的非英语系字符长度作为英语系字符的两倍来看待,如汉语的7个字,在这里要作为14字符长度来对待。
	function isLongerThan(str, limit){
		var length = str.length,
		    asciiCount;

		if(length > limit) return true;

		// 计算字符串中ASCii码的个数
		asciiCount = (str.match(/[\u0001-\u007f]+/g) || []).join("").length;

		length = (length - asciiCount) * 2 + asciiCount;

		return length > limit ? true : false;
	}

	isLongerThan("1234567890", 10);
	isLongerThan("12345678901", 10);
	isLongerThan("123456789测", 10);
	isLongerThan("12345678测", 10);


2. 给定n个1*3的长方形,用于填充n*3的区域,计算有多少种方法。

思路:一个3×3的区域可以用3个长方形横放或竖放填充,问题可以抽象为:在一个长度为n的标尺上,摆放任意个3×3的方块,有多少种摆法。 实现如下:
(function() {	
	this.numOfArranges = function (n){
		var numOfBlocks = parseInt(n/3), // 计算n个位置可以放置3×3盒子的个数
		    count = 1,
		    i;
		for(i=1;i<=numOfBlocks;i++){
			count += countOf(n, i);  // 依次将1到numOfBlocks个盒子放置在长度为n的标尺上,看有多少种
		}
		
		return count;
	}

	// 一定长度的标尺上放置特定个数的3×3盒子,有多少种组合
	// length:标尺的长度,numOfBlocks:盒子的个数
	function countOf(length, numOfBlocks){
		var left = length - numOfBlocks * 3;
		if(numOfBlocks == 1) {
			return (left >=0) ? (left + 1) : 0; // 只有一个盒子时,可放置位置的个数可直接得到。
		}
		else if(numOfBlocks > 1){ // 有多于一个盒子时,先放置一个在某位置,看剩余的位置和盒子有多少种组合
			var count = 0;
			for(var i=0;i<=left;i++){
				count += countOf(length-3-i, numOfBlocks-1);
			}
			return count;
		}
	}

})();


上面的方法存在的问题是:代码中的递归存在大量重复计算, 导致随着n的增大,计算所需的时间成级数式增加。在n=50时,需要花费几秒时间,而n=100时,几分钟都没有出结果。 因此做了优化,将每次递归调用的结果进行存储,当下次出现相同参数的调用时,直接返回,不再进行递归计算。实现如下,经测试,当n=1000时,需要20秒时间。

(function() {
	// 使用cache优化,去除重复计算
	this.numOfArranges_cache = function (n){
		var numOfBlocks = parseInt(n/3), // 计算n个位置可以放置3×3盒子的个数
		    count = 1,
		    i;
		for(i=1;i<=numOfBlocks;i++){
			count += countOf(n, i);  // 依次将1到numOfBlocks个盒子放置在长度为n的标尺上,看有多少种
		}
		
		return count;
	}

	// 一定长度的标尺上放置特定个数的3×3盒子,有多少种组合
	// length:标尺的长度,numOfBlocks:盒子的个数
	function countOf(length, numOfBlocks){
		var left = length - numOfBlocks * 3,
		    cache;
		if(numOfBlocks == 1) {
			return (left >=0) ? (left + 1) : 0; // 只有一个盒子时,可放置位置的个数可直接得到。
		}
		else if(numOfBlocks > 1){ // 有多于一个盒子时,先放置一个在某位置,看剩余的位置和盒子有多少种组合
			if((cache = countOf[length + '-' + numOfBlocks]) > 0)
			{
				return cache;
			}

			var count = 0;
			for(var i=0;i<=left;i++){
				count += countOf(length-3-i, numOfBlocks-1);
			}
			countOf[length + '-' + numOfBlocks] = count;
			return count;
		}
	}

})();
分享到:
评论

相关推荐

    javascript的经典面试题汇总

    根据给定的信息,我们将深入分析并提取出与JavaScript面试题相关的知识点。 ### 一、单选题 #### 1.... - **选项A**: `var obj = ();...以上是根据题目要求整理的JavaScript面试题知识点及解析。希望对准备面试...

    java面试问题整理

    Java面试问题整理旨在帮助开发者更好地准备面试,这里涵盖了几个核心知识点: 1. **静态方法与普通成员变量的访问权限**: - 静态方法和静态变量属于类级别,它们在类加载时初始化,无需类实例化即可访问。 - ...

    前端Javascript相关面试基础问答整理md

    ### JavaScript 面试基础知识梳理 #### 1. 原始值和引用值类型及区别 **原始值(Primitive Values)**: - 包括简单数据类型:`undefined`、`null`、`boolean`、`number`、`string`、`symbol`。 - 这些值直接存储...

    JavaScript最新面试题及答案整理,汇总版.md

    JavaScript最新面试题及答案整理,汇总版.md

    2017前端面试题整理汇总

    这份"2017前端面试题整理汇总"旨在为求职者提供一个全面了解前端面试趋势和必备技能的平台。 1. **JavaScript** JavaScript是前端开发的核心语言,面试中通常会考察基础语法、函数、闭包、原型链、异步处理等方面...

    面试问题整理面试问题整理

    * 客户端接收数据,并用 JavaScript 更新页面。 Java 基础知识点 * 四个线程的写法:Thread、Runnable、Callable、Executor。 * JDBC 连接数据库:使用 DriverManager 获取连接,使用 Statement 执行 SQL 语句,...

    大前端面试题内容,包括vue,JavaScript,CSS,html,node,算法,面试题目遇到问题整理等其他汇总

    算法是衡量开发者逻辑思维和问题解决能力的关键标准,面试中常见的算法题型包括排序(冒泡、插入、选择、快速、归并等)、查找(二分查找、哈希表)、数据结构(数组、链表、栈、队列、树、图)以及复杂度分析(时间...

    前端面试题整理:Nginx、webpack、Html&amp;Css、Vue、JavaScript.zip

    在准备面试时,不仅要理解这些技术的基本概念,还要能够结合实际项目经验,分析问题并提出解决方案。同时,关注最新技术动态,如Vue 3的新特性、TypeScript的使用等,将有助于你在面试中脱颖而出。

    前端面试、面试真题整理

    "前端面试、面试真题整理"这个资源包含了全面的面试准备材料,旨在帮助应聘者深入理解和掌握前端开发中的核心概念和技术。以下是对这些关键知识点的详细阐述: 1. HTML(超文本标记语言):HTML是构建网页的基础,...

    前端面试题整理

    ### 前端面试题知识点整理 #### 一、Canvas与SVG对比 **Canvas位图:** - **依赖分辨率:** Canvas元素所绘制的内容依赖于像素,因此在不同分辨率的设备上显示效果会有差异。 - **不支持事件处理器:** Canvas本身...

    IT公司面试笔试题库-腾讯Javascript面试题.doc

    根据提供的文档内容,我们可以整理出一系列与JavaScript相关的面试题及其解析。这些题目涵盖了JavaScript的基础概念、变量作用域、事件处理、函数定义、数据类型检查、运算符比较等多个方面。接下来,我们将逐一分析...

    前端面试-JavaScript

    最近结合一些面试的同学和大牛们(张旭童)反馈,前几天听童哥去阿里面试顺便整理了下一些面试题目。希望对大家有所帮助,后期会不断更新添加新的面试题。可以帮大家查漏不缺。以下是(2016、2017 、阿里、腾讯、...

    JavaScript面试出现频繁的一些易错点整理

    通过几个常见面试开始,讨论针对一个题目的分析思路,就有了下面这篇文章,本文主要给大家整理总结介绍了关于JavaScript面试中会频繁出现的一些易错点,对大家具有一定的参考学习价值,需要的朋友们下面随着小编来...

    前端面试常见问题集锦册

    前端: 这指的是前端开发,是指构建在网站或者 Web 应用程序中用户直接与之...因此,“前端面试常见问题集锦册”可以理解为一本专门整理了前端面试中常见问题的参考书或资源,供求职者在准备前端开发职位面试时使用。

    Javascript常见面试题.pdf

    尽管提供的文件内容不完整且存在识别错误,但是以上内容涵盖了JavaScript面试中可能考察的一些基本和进阶知识点,包括作用域链、数据类型、运算符、错误处理等。了解和掌握这些概念对任何希望在IT行业中求职,并需要...

    软件测试面试题汇总整理

    本资料包"软件测试面试题汇总整理"提供了来自华为、搜狐、微软等知名企业的46家公司的软件测试面试问题,旨在帮助求职者全面了解和准备软件测试领域的面试。以下是这些知识点的详细说明: 1. **软件测试基础**:这...

    vue面试题面试官经常问的,根据我的经验整理的

    2022年10个最佳面试问题 想雇佣你的下一个Vue开发者吗?然后,你需要最好的Vue面试问题。以下是要问应聘者的10个最重要的问题。 Vue访谈 Vue.js或Vue是一个开源前端JavaScript框架,用于构建单页应用程序和用户界面...

    前端面试题整理ing...

    "前端面试题整理ing..." 这个主题涵盖了面试中常见的技术问题,旨在帮助面试者更好地准备面试,同时也为招聘方提供了一个评估候选人的参考框架。这里我们将深入探讨一些前端面试中可能会遇到的知识点。 一、HTML...

    面试题整理react面试题整理(已面试成功).pdf

    React面试题整理主要涵盖了React组件基础、事件机制、React与原生事件的区别以及React中的高阶组件、Render Props和Hooks等核心概念。以下是这些知识点的详细解释: 1. **React组件基础** - 组件是React的基础构建...

Global site tag (gtag.js) - Google Analytics