標籤: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,8這8個數字,則最小的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--把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但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-牛客網