Muyun99's wiki Muyun99's wiki
首页
学术搬砖
学习笔记
生活杂谈
wiki搬运
资源收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Muyun99

努力成为一个善良的人
首页
学术搬砖
学习笔记
生活杂谈
wiki搬运
资源收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 面试资料

    • 面试问题集锦
    • 面试可能会用到的知识点
    • Supermemo 面试知识点卡片-20210808
    • LeetCode 面试算法题卡片-2021-0808
    • 资料搜集

    • 资源收藏
    • 面试资料
    Muyun99
    2021-08-08

    LeetCode 面试算法题卡片-2021-0808

    # 2021/08/08

    # 1、1137. 第 N 个泰波那契数 (opens new window)(自底向上)

    波那契序列 Tn 定义如下: 
    T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
    给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
    
    1
    2
    3
    # 递归做法(超时)
    class Solution:
        def tribonacci(self, n: int) -> int:
            if n == 0:
                return 0
            elif n == 1:
                return 1
            elif n == 2:
                return 1
            else:
                return self.tribonacci(n-3) + self.tribonacci(n-2) + self.tribonacci(n-1)
            
    # 自底向上
    class Solution:
        def tribonacci(self, n: int) -> int:
            a, b, c = 0, 1, 1
            for i in range(n):
                a, b, c = b, c, a+b+c
            return a
    # 打表
    class Solution:
        def tribonacci(self, n: int) -> int:
            Ts = [0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149, 274, 504, 927, 1705, 3136, 5768, 10609, 19513, 35890, 66012, 121415, 223317, 410744, 755476, 1389537, 2555757, 4700770, 8646064, 15902591, 29249425, 53798080, 98950096, 181997601, 334745777, 615693474, 1132436852, 2082876103]
            return Ts[n]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    # 2、剑指 Offer 09. 用两个栈实现队列 (opens new window)

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
    
    1
    class MinStack:
        def __init__(self):
            self.A, self.B = [], []
        def push(self, x: int) -> None:
            self.A.append(x)
            if not self.B or self.B[-1] >= x:
                self.B.append(x)
        def pop(self) -> None:
            if self.A.pop() == self.B[-1]:
                self.B.pop()
        def top(self) -> int:
            return self.A[-1]
        def min(self) -> int:
            return self.B[-1]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 3、剑指 Offer 30. 包含min函数的栈 (opens new window)

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
    
    1
    class CQueue:
    
        def __init__(self):
            self.stack_A = []
            self.stack_B = []
        def appendTail(self, value: int) -> None:
            self.stack_A.append(value)
        def deleteHead(self) -> int:
            if self.stack_B:
                return self.stack_B.pop()
            if not self.stack_A:
                return -1;
            while(self.stack_A):
                self.stack_B.append(self.stack_A.pop())
            return self.stack_B.pop()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    # 2021/08/09

    # 1、剑指 Offer 06. 从尾到头打印链表 (opens new window)

    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
    
    1
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        def reversePrint(self, head: ListNode) -> List[int]:
            stack = []
            while(head != None):
                stack.append(head.val)
                head = head.next
            return stack[::-1]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 2、剑指 Offer 24. 反转链表 (opens new window)

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
    
    1
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def reverseList(self, head: ListNode) -> ListNode:
            point1 = None
            point2 = head
            while point2:
                cur = point2
                point2 = point2.next
                cur.next = point1
                point1 = cur
            return point1
                
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    # 3、剑指 Offer 35. 复杂链表的复制 (opens new window)

    请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
    
    1
    
    
    1

    # 4、313. 超级丑数 (opens new window)(动态规划)

    超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。
    给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。
    题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。
    
    1
    2
    3
    class Solution:
        def nthSuperUglyNumber(self, n: int, primes: List[int]) -> int:
            dp = [0] * (n+1)
            dp[1] = 1
            len_primes = len(primes)
    
            # pointers记录质数应该与哪个丑数做乘积
            pointers = [1] * len_primes 
            
            for i in range(2, n+1):
                list1 = []
                for j in range(len_primes):
                    list1.append(dp[pointers[j]] * primes[j])
                
                min_num = min(list1)
                dp[i] = min_num
                for j in range(len_primes):
                    if dp[pointers[j]] * primes[j] == min_num:
                        pointers[j] += 1
            return dp[n]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    # 参考资料

    • 常见面试算法题突击手册:https://github.com/yifeikong/interview
    上次更新: 2021/08/17, 18:07:06
    Supermemo 面试知识点卡片-20210808
    资料搜集

    ← Supermemo 面试知识点卡片-20210808 资料搜集→

    最近更新
    01
    Structured Knowledge Distillation for Semantic Segmentation
    06-03
    02
    README 美化
    05-20
    03
    常见 Tricks 代码片段
    05-12
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 Muyun99 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×