题1 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
// 运行时间:115ms
// 占用内存:7772k
function Find(target, array)
{
// write code here
let l1 = array.length
let l2 = array[0].length
let i = l1-1
let j = 0
// js中换作while循环就无法通过了,是否说明js中for循环性能优于while循环?
// 后面用while重写通过,问题出在判断语句······(控制边界与控制结果)
for(;i >= 0 && j <= (l2-1);){
if(array[i][j] > target){
i--
}else if(array[i][j] < target){
j++
}else{
return true
}
}
return false
}
题2 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
function replaceSpace(str)
{
// 对js来说这道题很简单,使用正则表达式就可以做了
// /\s/是空格,后面加个g,替换全局的空格
return str.replace(/\s/g,"%20")
}
题3 从未到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function printListFromTailToHead(head)
{
var res = [], pNode = head;
// javascript数组操作,unshift插入数组第一位
while (pNode != null) {
res.unshift(pNode.val);
pNode = pNode.next;
}
return res;
}
题4 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
}
function reConstructBinaryTree(pre, vin)
{
// 空值要注意
if(pre.length === 0){
return null
}
let left_pre,left_vin,right_pre,right_vin = []
let head = new TreeNode(pre[0])
let root = vin.indexOf(pre[0])
left_pre = pre.slice(1, root+1)
right_pre = pre.slice(root+1)
left_vin = vin.slice(0,root)
right_vin = vin.slice(root+1)
// 递归:将根下面分为左右子树;然后求得左右子树的根节点
head.left = reConstructBinaryTree(left_pre, left_vin)
head.right = reConstructBinaryTree(right_pre, right_vin)
return head
}