1.在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
function find(arr,num){
var len = arr.length,i = 0,j = arr[0].length-1;
while(i < len && j >= 0){
if(arr[i][j] == num){
return true;
}else if(arr[i][j] > num){
j--;
}else{
i++;
}
}
return false;
}
複製程式碼
2.請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
function replaceSpace(str){
return str.replace(/\s+?/g,'%20');
}複製程式碼
3.輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
function printList(head) {
var res = [];
while(head){
res.push(head.value);
head = head.next;
}
res.reverse();
return res;
}複製程式碼
4.輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
function restructor(pre,vin){
if(pre.length == 0 || vin.length == 0){
return null;
}
var index = vin.indexOf(pre[0]);
var leftpre = pre.slice(1,index+1);
var rightpre = pre.slice(index+1);
var leftvin = vin.slice(0,index);
var rightvin = vin.slice(index+1);
var node = new TreeNode(vin[0]);
node.left = restructor(leftpre,leftvin);
node.right = restructor(rightpre,rightvin);
return node;
}
複製程式碼
5.用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。
var stack1 = [];
var stack2 = [];
function push(node){
stack1.push(node);
}
function pop(){
var tmp = stack1.pop();
while(tmp){
stack2.push(tmp);
tmp = stack1.pop();
}
var res = stack2.pop();
tmp = stack2.pop();
while(tmp){
stack1.push(tmp);
tmp = stack2.pop();
}
return res;
}複製程式碼
6.把一個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
function minArr(arr) {
if(arr.length == 0){
return 0;
}
return Math.min.apply(null,arr);
}複製程式碼
7.大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39
function fibonacci(n) {
if(n ==1 || n==0){
return n;
}
var a= 1,b=1,tmp;
for(var i=2;i<=n;i++){
tmp = a+b;
a = b;
b = tmp;
}
return a;
}複製程式碼
8.一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
function jumpFloor(num){
if(num < 1){
return 0;
}
if(num < 2){
return 1;
}
return jumpFloor(num-1) + jumpFloor(num-2);
}複製程式碼