开篇记录面试第57天

作者: 一路不向西 | 来源:发表于2019-07-24 18:37 被阅读0次

真的没想到这次找工作会经历这么长的时间,不过感觉最近公司的活动频繁一些了,开始有比较多的公司在接触了,所以现在要打起精神来了,一举拿下满意的offer。


Leetcode题目分析

  1. 226# 翻转二叉树
    这个题目的思路是用递归,左子树等于右子树的翻转,右子树等于左子树的翻转,要注意的就是递归之前要先记录子树变量,不能直接用root.left这种直接进行递归,看代码:
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if root is None:
            return None
        left = root.left
        right = root.right
        root.left = self.invertTree(right)
        root.right = self.invertTree(left)
        return root
  1. 234# 回文链表
    因为题目要求用O(n)时间复杂度O(1)空间复杂度,所以还是要依赖两个指针,具体的做法是需要一快一慢两个指针,快指针到末尾的时候,将慢指针后面的链表进行逆序,这时候就需要另外一个指针,p,p从链表头部和慢指针同时移动,如果p和慢指针指向的元素都相同,就是回文链表,如果有不一样的值,就不是了。
    代码如下:
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def isPalindrome(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if head is None or head.next is None:
            return True
        if head.next.next is None:
            return head.val == head.next.val
        slow = fast = p = head
        while fast.next and fast.next.next:
            fast = fast.next.next
            slow = slow.next
        def reverselinklist(head):
            if head is None:
                return None
            cur = head
            pre = None
            nxt = cur.next
            while nxt:
                cur.next = pre
                pre = cur
                cur = nxt
                nxt = nxt.next
            cur.next = pre
            head = cur
            return head
        q = reverselinklist(slow.next)
        while q.next:
            if p.val != q.val:
                return False
            p = p.next
            q = q.next
        return p.val == q.val
  1. 283# 移动0
    这道题的思路有一个比较巧妙的解,就是用一个变量j记录前面遍历到的非0位置,从头开始遍历数组,如果数不为0,则把当前数与j位置的数交换,同时j向后移动一位,如果数为0,j不动,所以j指向的是遍历到目前位置,最后一个非0数字的位置。
    代码:
class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        j = 0
        for i in range(len(nums)):
            nums[i], nums[j] = nums[j], nums[i]
            j += 1
        return nums
  1. 437# 路径总和三
    这个题目的关键是dfs(深度优先搜索),首先是要对每一个节点都遍历到,这个通过一个search函数实现,其次要通过dfs计算每个节点的路径值。直接上代码吧。
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def pathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: int
        """
        self.result = 0
        self.search(root, sum)
        return self.result
    
    def search(self, root, sum):
        if root is None:
            return
        self.dfs(root, 0, sum)
        self.search(root.left, sum)
        self.search(root.right, sum)
        
    def dfs(self, root, sum1, sum):
        if root is None:
            return
        sum1 += root.val
        if sum1 == sum:
            self.result += 1
        self.dfs(root.left, sum1, sum)
        self.dfs(root.right, sum1, sum)

相关文章

  • 开篇记录面试第69天

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

  • 开篇记录面试第28天

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

  • 开篇记录面试第57天

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

  • 开篇记录面试第17天

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

  • 开篇记录面试第56天

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

  • 开篇记录面试第14天

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

  • 开篇记录面试第15天

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

  • 开篇记录面试第19天

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

  • 开篇记录面试第33天

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

  • 开篇记录面试第31天

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

网友评论

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

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