算法40讲

找女朋友问题
· 如果能够后悔 o(n)
· 如果不能后悔

priority queue 一个任务的密度=重要程度/完成时间(始终完成最紧迫的工作)
kelly formula 凯利公式
game theory 博弈论

五个代码的模板(手写)
1、递归的终止条件

# 递归
def recurison(level, param1, param2):
    
    # recursion terminator
    if level > max_level:
        print_result
        return 
    
    # process logic in current level
    process_data(lecel,data...)
    
    # drill down 可能是一行也可能是两行
    self.recursion(level+1, p1, ...)
    
    # reverse the current level status
    recerse.state(level)

BFS

def BFS(graph, start, end):

    queue = []
    queue.append([start])
    visited.add(start)
    
    while queue:
        node = queue.pop() # 当前节点弹出
        visited.add(node)
        
        process(node)
        nodes = generate_related_nodes(note)
        queue.push(nodes)
        
    # other processinf work

二分法

left, right = 0, len(array) - 1
while left <= right:
    mid = left + (right - left)/2
    if array[mid] == target:
        # find the target!
        break or return result
    elif array[mid] < target:
        left = mid + 1
    else:
        right = mid - 1

动态规划

# 状态定义
dp = new int [m + 1][n + 1]

# 初始状态
dp[0][0] = x;
dp[0][1] = y;

# DP状态的推导
for i = 0; i <= n; i ++{
    for j = 0; j <= m; ++j{
        ...
        dp[i][j] = min{dp[i-1][j], dp[i][j-1], etc.}
    }
}
return dp[m][n] # 最优解

反转链表

前面的赋值的前半部分不会影响后半部分的值

def reverselist(self, head):
    cur, prev = head, None
    while cur:
        cur.next, prev, cur = prev, cur, cur.next
    return prev

两两链表交换相邻元素

def swappairs(self, head):
    result = ListNode(0)
    pre, pre.next = result, head
    while pre.next and pre.next.next:
        a = pre.next
        b = a.next
        pre.next, b.next, a.next = b, a, b.next
        pre = a
    return result.next

持续练习 + 精深练习
1、除了做熟悉和会做的题目之外,去刻意练习自己不熟悉的算法和数据结构
2、做过的题目后续要返回再复习

面试答题四件套
1、搞清楚题目到底要干嘛(询问题目细节,边界条件,可能的极端错误情况)
2、可能的解决方法(所有可能的解法都和面试官沟通一遍)
时间复杂度,空间复杂度
最优解
3、写代码
4、测试用例

斐波拉契数列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值