100天准备找工作倒计时:第八天
本来还有宁波银行的笔试,不知道怎么回事反正被安排到下周了
这周日又是网易互娱和美团的笔试,最近高强度笔试,脑子要裂开了
算法题:
1.后序中序还原二叉树:原理和前序中序还原差不多,根据后序倒叙是根节点的排序,在中序中找到根节点的坐标并划分出左右子树并对左右子树再次进行划分;
2.最长无重复子串(第n次做了):滑动窗口有可能会超时,新方法是建一个极限长度的数组nums,nums[i]的值表示的是i这个数字上次出现的坐标的下一位,还有一个变量start记录当前子串的开始位置,当遍历数组发现数字上次出现的位置在当前start之后,说明在当前子串出现重复数字了,将start设置为上次出现位置的下一位,每遍历一位都更新一次当前长度和最大长度,最终返回最大长度即可;
3.二叉树最近公共祖先(感觉没掌握,明天要再做一遍):后序遍历递归,出口时当前节点为空或者当前结点为p或q的任意一个则返回当前节点;后序遍历,判断如果左子树为空意味着左子树未找到pq则pq一定在右子树中,返回right,或者左子树不为空但右子树为空那么返回左子树,如果左右均不为空说明左右各一个,返回当前节点;
4.合并数组(已知A数组空间足够添加B数组:
5.合并两个有序链表:设置一个伪头指针head,一个当前结点指针cur,当l1和l2都未遍历结束时,判断l1和l2的值的大小,让cur指向小的那个,小的那个再后移一格,cur也后移一格,直到某一个被遍历结束则直接将未遍历的剩余链表直接添加到末尾即可;
6.判断是否是平衡二叉树(1.平衡二叉树是指左后子树深度差不超过1;2.前置题目是计算二叉树的深度):二叉树深度计算:递归后序遍历,出口为结点为空时返回0,结点深度为左右节点深度的最大值+1;判断是否是平衡二叉树:后序遍历+剪枝,出口为结点为null时返回0,返回时判断左右子树深度是否相差大于1,如果大于1则返回-1,如果不大于1则正常返回左右节点深度最大值+1,剪枝操作是左递归右递归开始返回时会判断是否为-1,如果为-1则可以直接返回-1;
7.反转字符串:我自己写的是新数组从尾到头放置字符串从头到尾的字符然后返回以该数组新建的字符串,看到最快的答案是头尾指针然后交换位置;
8.二分查找第一个大于等于目标值的元素(做过两三遍了还是有点不熟练):设置lo 和 hi 两个指针指向头尾,mid = lo + (hi - lo)/ 2,判断如果mid > v 则hi = mid,否则 lo = lo + 1,直到lo = high 返回lo + 1;
面试题:
1.微博的数据库设计,建立索引以及优化:
用户注册表、用户详细信息表、用户关系表、微博表、被AT用户表、微博收藏表、私信表、评论表、管理员表
用户注册表、用户详细信息表、用户关系表、微博表、被AT用户表、微博收藏表、私信表、评论表、管理员表
晚上该看面试题的时候看了会比赛,然后就走神了,就没怎么学,又只学了半天多呜呜