【算法】一道腾讯前端试题,位图法(bitmap),感受一下什么叫做“算法”

  学了这么久编程了,for循环使用了不知道多少次。解决一个计算问题,可以用n种不同的方法来实现,而优秀的算法,可以提高计算效率,这对于大量的计算有着显著的作用。

我们学习的编程基础中,并没有强调算法的重要性,因为我们所涉及的计算量对于计算机来说太渺小了,但是,早些将“算法最优性”的意识植入大脑,这将有利于我们向更高级的程序员迈进。这里分享一个腾讯的面试题,不难,但是可以体会到算法的巧妙之处。(先自己想出一个思路,再看答案)

  题目:有一组数字,从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的中不存在哪个数值,也就是那些被删除的。

转载于:https://www.cnblogs.com/GeekHacker/archive/2012/07/01/2572090.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值