二维数组中的查找
描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]
给定 target = 7,返回 true。
给定 target = 3,返回 false。
题解答案
function Find(target, array)
{
let i=0,j=array[0].length-1;
while(true){
if(array[i][j]==target)
return true;
else if(array[i][j]>target)
j--;
else
i++;
if(i<0||j<0||i==array.length||j==array[0].length)
return false;
}
}
从尾到头打印链表
描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList
题解答案
- 栈
function printListFromTailToHead(head)
{
let arr=[];
while(head){
arr.push(head.val);
head=head.next;
}
return arr.reverse();
}
重建二叉树
描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
题解答案
function reConstructBinaryTree(pre, vin) {
if(!pre.length||!vin.length)
return;
let i=0;
let tree=new TreeNode(pre[0]);
for(;i<vin.length;i++){
if(pre[0]==vin[i])
break;
}
tree.left=reConstructBinaryTree(pre.slice(1,i+1),vin.slice(0,i));
tree.right=reConstructBinaryTree(pre.slice(i+1),vin.slice(i+1));
return tree;
}
用两个栈实现队列
描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
题解答案
const inStack=[],outStack=[];
function push(node)
{
inStack.push(node);//没有返回值
}
function pop()
{
if(outStack.length)//栈2中有的话,直接出栈
return outStack.pop();
while(inStack.length)//栈2中没东西,只要栈1不为空
outStack.push(inStack.pop());//栈1出栈,栈2入栈
return outStack.pop();
}
斐波那契数列
题解答案
不能用栈啊,会溢出(不要有惯性思维)。这里可以用迭代。
function Fibonacci(n)
{
if(n==0)
return 0;
if(n==1)
return 1;
let num,num1=0,num2=1;
for(let i=2;i<=n;i++){
num=num1+num2;
num1=num2;
num2=num;
}
return num;
}
跳台阶
描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
思路
我是把number写到了5才找到规律,看了答案才知道原理:
如果青蛙当前在第n级台阶上,那它上一步是在哪里呢?
显然,由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或者第n-2级台阶,也就是说它跳上n级台阶的跳法数是跳上n-1和跳上n-2级台阶的跳法数之和。
跳台阶扩展问题
描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题解答案(绝绝子)
每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后一个台阶必须跳。所以共有2^(n-1)种情况
function jumpFloorII(number)
{
return Math.pow(2,number-1);
}
二进制中1的个数
描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示
题解答案
数值的整数次方
描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
题解答案
但是不是最优的
function Power(base, exponent)
{
let result=1;
let exponent1=exponent>0?exponent:-exponent;
for(let i=1;i<=exponent1;i++){
result*=base;
}
result=exponent<0?1.0/result:result;
return result;
}
调整数组顺序使奇数位于偶数前面
描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题解答案
①准备两个数组
function reOrderArray( array ) {
let arr1=[],arr2=[];
array.forEach(item=>{
if(item%2!=0)
arr1.push(item);
else
arr2.push(item);
})
return arr1.concat(arr2);
}
②冒泡排序