【算法】一道騰訊前端試題,位圖法(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的中不存在哪個數值,也就是那些被刪除的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM