剑客练习
1,在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数
输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一维数组和二维数组类似矩阵 从a[i][j]开始比较
function Find(target, array) { let i = 0; let j = array[i].length - 1; while (i < array.length && j >= 0) { 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) { return str.replace(/\s/g,'%20') }
str.repalce(/\s/g)是替换空格的意思
除了空格 可以后面填写替换别的东西 比如汉字 "我","你"
3 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
function printListFromTailToHead(head) { if(!head){ return 0; } else{ var arr=new Array(); for(var q=head;q;q=q.next){ arr.push(q.val); } } arr.reverse(); return arr; }
第一种先判断头是否为空,不为空时用q指针 arr数组push结尾添加值。最后把数组翻转
第二种
function printListFromTailToHead(head) { var p=head; var result=[]; while(p){ result.unshift(p.val) p=p.next; } return result; }
用unshift进行头部添加 直接实现
4输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
function reConstructBinaryTree(pre, vin) { // write code here if(pre.length==0||vin.length==0){ return null; }; let index=vin.indexOf(pre[0]), left=vin.slice(0,index), right=vin.slice(index+1); return { val:pre[0], //递归左右子树的前序、中序 left:reConstructBinaryTree(pre.slice(1,index+1),left), right:reConstructBinaryTree(pre.slice(index+1),right) }; }
本题主要考察了二叉树的遍历,先复习下
前序遍历(VLR):
1.访问根节点
2.前序遍历左子树
3.前序遍历右子树
中序遍历(LVR):
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树
后序遍历(LRV):
1.后序遍历左子树
2.后序遍历右子树
3.访问根节点
总之,做这种有关树、链表的题一定要有递归的思想,总之该题的解题思路就是四步,具体思路可以参考这里
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。