面试常见LeetCode算法题

最近在面试,整理一下LeetCode高频题

 

* 翻转单链表
循环四步走:七句话(2+4+1)。声名两个变量,一个Temp用户存放返回根节点,一个cursor用于存放合并好的节点。然后while root!=None就进行迭代,把下一步放到Temp,然后更新当前node的next。然后更新node和before。
* 二分查找:
while(left <= right),然后key大于mid就left=mid+1,key小于mid就更新right=mid-1,等于则返回。 外面return -left。
记录:无需递归。直接while。注意更新的时候需要加减一。如果不加减一可能会进入死循环。
*  快速排序:
先Partition返回用pivot把数组分成两半,然后quickSort左+1,quickSort右+1。
*  删除单链表倒数第n个节点:
两个游标保持n的距离迭代,当fast到达结尾删除slow处的节点。
*  给一个数组,构建二叉搜索树:(找到一个元素在二叉搜索树中的位置)注:如果插入元素已经存在,不进行插入。
构建二叉搜索树,相当于遍历数组执行插入操作。insetBST(root,x),判断节点值于x的决定怎么插入。
*  判断是否是对称二叉树:
核心isSymmetric(root.left, root.right),然后判断是否为空,不为空值是否相等。
*  股票的最佳买卖时机:
两个变量,一个历史最低点historyMin,一个当前能获得的最大利益MaxProfit,if 当前值-historyMin>MaxProfit,更新MaxProfit。
*  合并两个有序链表**
循环三步走:新建一个节点赋给两个变量,一个用于返回结果,一个用于遍历。当两条链表都不为None,谁小谁添加到before的后面(if里面三步),最后把剩下的,添加到before后。
*  从前序与中序遍历序列构造二叉树
如果前序遍历数组不为None。那么就用前序遍历的第一个值v构造节点,找出值v在中序遍历中的位置,对前序遍历和中序遍历进行切分。分别传入左递归生成左子树,右递归生成右子树。说明:前序遍历:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]。后序遍历:[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]。
*  字符串数字相加
一个进位标志位flag。一个结果res。从个位开始遍历,如果不存在就补0。计算每一位然后追加到res中,最后res翻转,再判断flag,决定是否再加一位。说明:数字相加的题型,一定要从低位往高位加。
*  插入区间
三种情况对应三个while:左边(b<左侧)、有交集(a<=右侧)、右侧(a>右侧)先初始化一个结果。左边的直接放入res。 中间有交集的合并成一个在放入res、右边的直接放入res。返回res。
*  二叉树最大深度
当前节点深度为:当前节点为空则depth=0,不为空则depth=1+最大值(MaxDepth(root.left),MaxDepth(root.right)),
*  翻转二叉树
递归调用invertTree(root.left)得到翻转后的结果,然后改变当前node的左右子树指向。记得有方法返回值。
*  翻转单链表II—翻转m~n之间的节点 **
方法一:进行m次遍历,再进行n-m次(删除+插入)操作,把尾部节点放到首位。(需要新建节点用来记录root)
方法二:进行m次遍历,翻转m到n之间的节点,拼接翻转后的nodelist。
*  搜索二维矩阵
其实就是一个递增数组,只不过分成了很多行。直接用二分查找。只不过取值的时候需要整除和余数去取。
*  搜索二维矩阵II
方法一:二分查找。先找到所在的行,在去行里面找有没有。O(lg(n!))
方法二:从左上角开始遍历,如果比target大则往左走,如果比target小则往下走。O(n+m)
*  单链表排序-(归并排序)
找到中间节点+递归sort左sort右+合并两个有序链表。细节:①得到midNode②先排[midNode.next,)③把midNode.next置为IE空④再排[head,midNode]⑤merge两个有序单链表
*  数组中第K个最大元素
用前K个数构建一个小根堆,然后遍历,如果后面的数大于小根堆的root,则替换root,并且重新构建小根堆。直到结尾。
说明:①从非叶子节点 i/2-1开始遍历②左子树2*i+1 右子树2*i+2③adjustHeap里面全是if④取子树值时,需要判断是超过堆大小
*  堆排序
对数组大小为n的数组nums构建一个堆,然后把顶部元素放到末尾。再重新初始化一个n-1的堆,如此循环
*  写一个函数,能求出输入正数n的平方根x,且精度小于e。(即:x^2-e<n<x^2+e)
二分法,设定一个left=0,right=n。while(不满足x^2-e<n<x^2+e) 就一直二分,直到满足,最后返回n。可以用8来举例。
*  判断一个数是否是质数
从2到n,有一个数能整除就return False。(可以遍历到根号n)

会持续更新,打算背下来40道LeetCode应该就够用。

欢迎大家补充!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值