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);
}复制代码