【算法】一道腾讯前端试题,位图法(bitmap),感受一下什么叫做“算法”
2012-07-01 17:51
393 查看
学了这么久编程了,for循环使用了不知道多少次。解决一个计算问题,可以用n种不同的方法来实现,而优秀的算法,可以提高计算效率,这对于大量的计算有着显著的作用。
我们学习的编程基础中,并没有强调算法的重要性,因为我们所涉及的计算量对于计算机来说太渺小了,但是,早些将“算法最优性”的意识植入大脑,这将有利于我们向更高级的程序员迈进。这里分享一个腾讯的面试题,不难,但是可以体会到算法的巧妙之处。(先自己想出一个思路,再看答案)
题目:有一组数字,从1到n(此例子假设n=10),乱序且不存在重复的数字。例如:[8,9,2,3,6,1,4,5,7,10]。从中任意删除了3个数,顺序也再次被打乱,将这些剩余数字放在一个n-3的数组里,请找出丢失的数字,要求算法比较快。
我们学习的编程基础中,并没有强调算法的重要性,因为我们所涉及的计算量对于计算机来说太渺小了,但是,早些将“算法最优性”的意识植入大脑,这将有利于我们向更高级的程序员迈进。这里分享一个腾讯的面试题,不难,但是可以体会到算法的巧妙之处。(先自己想出一个思路,再看答案)
题目:有一组数字,从1到n(此例子假设n=10),乱序且不存在重复的数字。例如:[8,9,2,3,6,1,4,5,7,10]。从中任意删除了3个数,顺序也再次被打乱,将这些剩余数字放在一个n-3的数组里,请找出丢失的数字,要求算法比较快。
var n = 10; var oldArr = [5,1,6,3,7,8,10];//剩余的数组; var newArr = Array(11); //因为题目中是从1开始的,所以第0位其实没用 var lostArr = [];//要找的数的数组 for(var i = 0; i < n-3; i++) { newArr[oldArr[i]] = 1; } for(var j = 0; j < newArr.length; j++) { if(!newArr[j]) { // !newArr[j]就是当newArr[j]是undefined的时候 lostArr.push(j); } } lostArr.shift(0); alert(lostArr); 原理就是,创建一个newArray,长度为11。(由于新数组没有定义具体的元素,所以所有元素默认为undefined)。把删除后的数组oldArray里的元素,按照他的值来设置newArray的相应位置。 比如说,old里的第一个元素是5,那么就把newArr[5]的位置设置为1,old的元素值现在也当做new的数组下标,当old元素存在,那么new的相应位置的元素就是1,old中不存在的,new中相应是 undefined(就是101010101010的是非模式)。所以,遍历new,哪个下标的元素是undefined,就证明old的中不存在哪个数值,也就是那些被删除的。
相关文章推荐
- 一道腾讯前端试题,主要是算法
- 一道腾讯前端试题
- 一道腾讯前端试题 查找指定个数数字里面丢失的数字
- 一道腾讯前端试题,谁来试试身手
- 前端试题-什么是css sprite?优缺点?
- 一道腾讯校招试题
- 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
- 什么叫做学计算机有天赋? 用自己最真实的例子回答一下谢谢!
- 也做了一下腾讯前端面试题
- 【算法系列】一道笔试试题——回文数算法
- 浪客剑心:位图法Bitmap算法分析
- [C#]体会一下什么叫做强类型
- 什么叫做算法(代码篇)
- 记一下这道算法题,是腾讯实习面试的题目(欢迎高手指点
- 腾讯笔试题_电梯问题_思路和初步的算法_討論一下
- 腾讯笔试题_电梯问题_思路和初步的算法_討論一下
- 精妙算法收集---一道有趣的腾讯笔试加分题
- 一道算法引发的思考:编程之外,我们还要关注什么
- 有意思的腾讯web前端在线试题(附上通关攻略)
- 对《数组去重――一道前端校招试题》的解读