js能力測試題21--42-牛客網

來源:互聯網
上載者:User

標籤:ber   solution   數組   排序數組   root   字元   min   rom   結果   

 

22--從上往下列印出二叉樹的每個節點,同層節點從左至右列印。

function PrintFromTopToBottom(root) {  //廣度遍曆,先進先出,利用隊列實現;深度遍曆,後進先出,利用棧實現    var queue = []; //建立一個空隊列    queue.push(root); //將二叉樹的根push進隊列    var result = []; //定義一個結果數組    if (root == null) {   //如果二叉樹不存在,直接返回result        return result;    }    while (queue.length) { //當隊列不為空白的情況下        var temp = queue.shift();  //把隊列中的第一個元素刪除,並返回其值        result.push(temp.val); //將隊列中的第一個元素push進result        if (temp.left) {   //根節點的左子樹,push進隊列            queue.push(temp.left);        }        if (temp.right) {    //根節點的右子樹,push進隊列            queue.push(temp.right);        }    }    return result;}

 

28--數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度為9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0

function getExpend(numbers){       var mp={}    for(var index in numbers){             //遍曆numbers數組      if(!mp[numbers[index]]){            //如果numbers中的值不在mp中的話,將mp[numbers[index]]置為1,                                         // 即將numbers中的value放在mp中作key使用,然後其mp中的value為對應mp中key的個數            mp[numbers[index]]=1        }else{                          //如果numbers中的值在mp中的話,將mp[numbers[index]]++,即將mp中對應key的個數加1            mp[numbers[index]]++        }    }    for(var key in mp){                //遍曆mp,mp中的key為numbers中的value,mp中的value為其個數       if(mp[key]>numbers.length/2){                 return key       }    }    return 0}console.log(getExpend([1,2,3,2,2,2,5,4,2]))

 

29--輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,88個數字,則最小的4個數字是1,2,3,4

function GetLeastNumbers_Solution(input, k)  {    if(input.length < k) { 
return false;
}
input.sort(function(a,b){
return a-b;
}
); return input.slice(0,k);}

 

33--把只包含因子235的數稱作醜數(Ugly Number)。例如68都是醜數,但14不是,因為它包含因子7習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。

function Ugly(numbers){  //判斷醜數       while(numbers){        if(numbers%5==0){            numbers/=5        }else if(numbers%3==0){            numbers/=3        }else if(numbers%2==0){            numbers/=2        }else if(numbers==1){            return true        }else{    //這裡,表明除完5、3、2後剩下的因子不為1,則表示還有其他因子存在,因此,不是醜數            return false        }    }}function getNUgly(n){    var count=1   //用來統計第幾個醜數    var num = 1   //用來表示第幾個醜數對應的值    while(count<=n){        if(Ugly(num++)){            count++;        }    }    return --num}console.log(getNUgly(7))

 

 34--在一個字串(1<=字串長度<=10000,全部由大寫字母組成)中找到第一個只出現一次的字元,並返回它的位置

function FirstNotRepeatingChar(str)    {    // write code here        var mp = {}    for (var index in str) {        //遍曆numbers數組        if (!mp[str[index]]) {      //如果numbers中的值不在mp中的話,將mp[numbers[index]]置為1,            // 即將numbers中的value放在mp中作key使用,然後其mp中的value為對應mp中key的個數            mp[str[index]] = 1        } else {                       //如果numbers中的值在mp中的話,將mp[numbers[index]]++,即將mp中對應key的個數加1            mp[str[index]]++        }    }    for(var index in str){        if(mp[str[index]]==1){            return index;        }    }    return -1;}

 

 37--統計一個數字在排序數組中出現的次數。

function getCount(arr,k){ var mp={};   //定義一個mp對象    for(var index in arr){       //遍曆arr,若arr中的資料不在mp中,則將其放進mp中,mp中其對應value為1        if(!mp[arr[index]]){            mp[arr[index]]=1;        }else{            mp[arr[index]]++;//遍曆arr,若arr中的資料在mp中,則將其放進mp中,mp中其對應value加1,該值對應的個數        }    }    return mp[k]?mp[k]:0  //存在k返回個數,不存在則返回0}console.log(getCount([1,3,5,6,7,8,3,8,8],8));console.log(getCount([1,3,5,6,7,8,3,8,8]s,9));

 

40--一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

function searchNum(data){   var mp={};    for(var index in data){        if(!mp[data[index]]){            mp[data[index]]=1;        }else{            mp[data[index]]++        }    }    var arr=[];    for(var key in mp){ //將個數為1的元素存在一個數組中,並返回即可        if(mp[key]==1){           arr.push(key)            //console.log(key);        }    }    return arr;}console.log(searchNum([1,2,3,4,5,4,5,3,6,6]));

 

42--輸入一個遞增排序的數組和一個數字S,在數組中尋找兩個數,使得他們的和正好是S,如果有多對數位和等於S,輸出兩個數的乘積最小的。

function FindNumbersWithSum(array, sum){    var len=array.length;    var begin=0;    var end=len-1;    var s =Math.pow(2,31)    var beginmin = 0    var endmin=0    while(begin<end){     //前後一起推進,計算,大於sum,end向前,小於sum,begin向後        if(array[begin]+array[end]>sum){            end--;        }else if(array[begin]+array[end]<sum){            begin++;        }else{        //找到一對,繼續遍曆,看是否還存在滿足條件的            if(s>array[begin]*array[end]){                s=array[begin]*array[end]                beginmin = array[begin]                endmin=array[end]            }            begin++;            end--;        }    }if(s == Math.pow(2,31)){   //這裡s值沒變,即表示沒有找到滿足條件的,返回空        return []    }    return [beginmin,endmin]}

 

js能力測試題21--42-牛客網

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.