开篇记录面试第69天

作者: 一路不向西 | 来源:发表于2019-08-05 23:56 被阅读0次

这次换工作战线确实拉的太长了,连我自己都快不记得最开始的面试是什么状态了。上周五面了瓜子的终面,缺在基础知识不够了,当时问几种排序方法的复杂度和特点,没答好,然后下午面博彦科技,问了各种建模、优化之类的问题,评价是我没有对数据的把控,没有数据的感觉,当时还觉得挺感激面试官的,还跟我说一定要把事情想的难一点,做的难一点,让别人无法短期复制你的工作,建立自己的不可替代性。
说多了。好好准备面试吧。今天年中绩效给了C,估计离劝退不远了。


今天做了两道LeetCode题目:

  1. 543#二叉树的直径
    给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
    解答:题目很容易看出来,直径就是根节点的左右子树的深度和,所以用深度优先遍历来计算左右子树的深度的和,再加1就是结果了。递归的方式是dfs调用左右子树,返回左右子树中深度较大的一个加1的结果,作为该子树的深度,用一个变量记录最终的深度和。
class Solution(object):
    def diameterOfBinaryTree(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        self.ans = 0
        
        def dfs(root):
            if root is None:
                return 0
            left = dfs(root.left)
            right = dfs(root.right)
            self.ans = max(self.ans, left + right)
            return max(left,right) + 1
        dfs(root)
        return self.ans
  1. 581# 最短无序连续子数组
    题目:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

你找到的子数组应是最短的,请输出它的长度。
解答:这个题目最简单的思路是对数组进行排序,然后找出跟排序后数组数字不能一一对应的起始点和终止点,但是这种解法复杂度比较高。有一种O(n)的方法是,用两个指针,一前pre一后after,从两端开始遍历,用两个变量max和min记录遍历到当前时的最大值和最小值,如果pre位置的值小于max,则pre更新,如果after的值大于min,则after更新位置。

class Solution(object):
    def findUnsortedSubarray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_i, min_i, n = nums[0], nums[-1], len(nums)
        j, k = -1, 0
        for i in range(n):
            max_i = max(max_i, nums[i])
            if nums[i] < max_i:
                j = i
            min_i = min(min_i, nums[n-i-1])
            if nums[n-i-1] > min_i:
                k = n-i-1
        return j-k+1

3.617# 合并二叉树
题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
解答:这个题目也是用到递归,遍历到两个树的对应节点时,如果两个节点都不为空,则相加,如果一个为空,则返回另一个的值。

class Solution(object):
    def mergeTrees(self, t1, t2):
        """
        :type t1: TreeNode
        :type t2: TreeNode
        :rtype: TreeNode
        """
        # 如果两个节点都存在,则相加
        # 如果有一个不存在,则函数返回另一个
        if not t1:
            return t2
        if not t2:
            return t1
        t1.val += t2.val
        t1.left = self.mergeTrees(t1.left, t2.left)
        t1.right = self.mergeTrees(t1.right, t2.right)
        return t1

相关文章

  • 开篇记录面试第69天

    这次换工作战线确实拉的太长了,连我自己都快不记得最开始的面试是什么状态了。上周五面了瓜子的终面,缺在基础知识不够了...

  • 开篇记录面试第28天

    今天早上早起去面试了易道博识,结果因为昨晚跑步,睡得晚,早上差点起不来。 正题。记录下今天面试几个没有答出来的问题...

  • 开篇记录面试第57天

    真的没想到这次找工作会经历这么长的时间,不过感觉最近公司的活动频繁一些了,开始有比较多的公司在接触了,所以现在要打...

  • 开篇记录面试第17天

    说真的,早上收到了一个准offer的电话,感觉心态一下子就轻松了很多。当然,我知道那并不是我本意,我要做的还有很多...

  • 开篇记录面试第56天

    中间经历了一段时间的思想斗争,发现自己还是想换个环境的,毕竟在这边已经显然拿不到年终奖了,晋升也没什么希望,所以还...

  • 开篇记录面试第14天

    时间过得好快,不知不觉已经是开篇记录的第14天了,至今没有offer。正式面试也有三个周了,面试问题倒是积累了不少...

  • 开篇记录面试第15天

    今天眼睛特别不舒服,也不知道是压力太大还是怎么了,以前也没这么多毛病啊,怎么看几道算法题就开始这也不舒服,那也不舒...

  • 开篇记录面试第19天

    今天下午请假去面试了陌陌,记录了几道题目: 二叉树的蛇形遍历,就是第一层从左到右,第二层从右到左,第三层从左到右,...

  • 开篇记录面试第33天

    我真的是已经要把北京的工作都错过了,今天面试头条又挂了,深深地绝望,已经完全不知道该超哪个方向努力了。反正现在公司...

  • 开篇记录面试第31天

    今天去面试了小米,能有二面的机会真的很开心,而且面试的感觉也还比较舒服,虽然最后遗憾没有面试上,但是能感觉到自己有...

网友评论

    本文标题:开篇记录面试第69天

    本文链接:https://www.haomeiwen.com/subject/hhkbdctx.html