coding notes
未读双指针双指针的思想和滑动窗口类似,不同的是双指针使用的是相向运动的滑窗,双指针技巧主要分为两类:左右指针和快慢指针。
left = 0
right = len(nums) – 1
双指针一般用于使用已经排序完成的数组,一般没有规律的数组,不建议使用一般写法
1234567891011left = 0 #初始化左边界res = -float('inf') or float('inf') #初始化返回值for right in len(nums):# while right <len(nums): pass #更新窗口的内部信息 while: #根据题意进行调整left,此时正在滑动left指针,使用while # 比较更新res(用于收缩场景) pass # 扩张或者收缩窗口的大小 # 比较更新res(用于扩张场景)return res
左右指针
12345678left, right = 0, len(nums) - 1 #初始化left,rightwhile left < ...
coding notes
未读list问题# 在[x for x in x]中可以用的函数:map(), reduce(), filter(),
# lambda expression:
lambda arguments: expression
# map expression:
# reduce expression:
# filter expression:
# 排序嵌套 list,比如元素值是一个 tuple 或者 list
l = [('a', 1), ('c', 2), ('b',3)]
sorted(l, key=lambda p:p[0]) # 根据第1个值排序,[('a', 1), ('b', 3), ('c', 2)]
sorted(l, key=lambda p:p[1]) # 根据第2个值排序,[('a', 1), ('c', 2), ('b', 3)]
sorted(l, key=lambda p:(-p[0], p[1])) # 先根据第一个 ...
coding notes
未读字符串的常规运算12345678910111213141516171819202122232425# 将字符转为ascll码表num = ord('a')# 将码表再转回来letter = chr(num)# 求两个字符串的差值print(ord('b')-ord('a')) # 字符串的反转letter='leetcode'reverse_str = letter[::-1]# 判断字符类型# 如果 string 只包含数字则返回 True 否则返回 False.letter.isdigit()#如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 Falseletter.isalnum()# 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回Falseletter.isalpha()# 将letter中的x替换为yyy,可以将空格' '替换成为''等于去除空格letter.replace(' ...
coding notes
未读4. 字典树问题使用list中表示字典树,Trie 中一般都含有大量的空链接,因此在绘制一棵单词查找树时一般会忽略空链接,同时为了方便理解我们可以画成这样:
使用树形架构表示字典树
使用dict表示123456789101112131415161718192021222324252627282930313233# 使用dict表示Trieclass Trie: def __init__(self): self.lookup = {} def insert(self, word: str) -> None: tree = self.lookup for a in word: if a not in tree: tree[a] = {} tree = tree[a] tree['#'] = '#' def search(self, word: str) ...
coding notes
未读动态规划和贪心算法贪心算法使用局部最优,推出全局最优算法
分发饼干
1
用最少数量的箭引爆气球
1
动态规划基础套路
1.dp数组的定义和下标。【非常重要】
2.递推公式。
3.dp数组如何初始化,初始化也需要注意。【从哪里初始化,初始化后该如何使用,这要参考dp数组的定义】
4.遍历顺序,比较考究,01 先遍历背包,后遍历物品。
4.1排列和组合的遍历顺序是不相同的。
4.1.1 排列:背包在外 物品在内。(322)
4.1.2 组合:物品在外,背包在内。(518)
5.(出现问题)打印dp数组。(打印dp数组,检查是否有问题,检验1 2 3 4 步骤)
123456789101112131415# 自顶向下递归的动态规划def dp(状态1, 状态2, ...): for 选择 in 所有可能的选择: # 此时的状态已经因为做了选择而改变 result = 求最值(result, dp(状态1, 状态2, ...)) return result# 自底向上迭代的动态规划# 初始化 base cas ...
coding notes
未读常见的二分查找的方法1. 二分查找昌需要确定target和middle的相对位置(如图):
常见的方式是使用左闭右开的区间,符合python中数据的定义格式
lower_bound 返回最小的满足 nums[i] >= target 的 i如果数组为空,或者所有数都 < target,则返回 len(nums)要求 nums 是非递减,即 nums[i] <= nums[i + 1]
左闭右开区间写法(常用的写法,一般python中的range()函数也是左闭右开区间,应该使用统一的标准)
1234567891011121314151617181920212223242526def lower_bound2(nums: List[int], target: int) -> int: left = 0 right = len(nums) # 左闭右开区间 [left, right),取值的左右区间是否开闭,会影响二分中left,right的取值 while left < right: # 区间不为空, 当 ...
deeplearning
未读3.Transformer(重点掌握)
Transformer是什么,它的基本原理是什么?
自注意力(Self-Attention)的作用是什么?它有什么优势?
Transformer的Encoder和Decoder分别是做什么的?
Multi-Head Attention是什么?它的作用是什么?
Transformer中的Positional Encoding是做什么的?
Transformer的训练过程?
Transformer与传统的RNN和CNN模型有何区别?
Transformer在自然语言处理、计算机视觉等领域的应用有哪些?
何解释Transformer的注意力权重?
Transformer是什么,它的基本原理是什么?
一句话:Transformer是一种序列到序列(Sequence-to-Sequence)的神经网络模型,它采用自注意力机制来对输入序列进行编码和解码,用于处理自然语言处理、计算机视觉等任务。
详细:Transformer是一种革命性的神经网络模型,由Vaswani等人在2017年提出,用于处理序列到序列(Sequence-to-Sequence) ...
coding notes
未读回溯算法回溯算法可以解决的问题
组合问题:N个数里面按一定规则找出k个数的集合
切割问题:一个字符串按一定规则有几种切割方式
子集问题:一个N个数的集合里有多少符合条件的子集
排列问题:N个数按一定规则全排列,有几种排列方式
棋盘问题:N皇后,解数独等等
回溯法一般都可以抽象为树形结构,解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度就构成了树的深度。
确定回溯函数模板返回值以及参数
确定回溯函数终止条件
确定
回溯搜索的遍历过程
12345678910111213141516171819def backtracking(参数): if 终止条件: 存放结果; return; for 选择 in 当前节点的邻居: # 本节点所连接的其他节点 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果def backtracking(parameters): if termination_condition: # ...
coding notes
未读DFS - 深度优先搜索DFS的思考步骤
确认递归函数,参数
确认终止条件
处理目前搜索节点出发的路径
1234567891011121314151617181920def dfs(参数): if 终止条件: # 存放结果 return for 选择 in 当前节点的邻居: # 本节点所连接的其他节点 # 处理节点 dfs(选择) # 递归调用 # 回溯,撤销处理结果 def dfs(parameters): if termination_condition: store_result() return for choice in connected_nodes_of_current_node: process_node(choice) dfs(graph, chosen_node) # Recursion undo_process_node(choice) # Backtrack ...
coding notes
未读栈用栈表示队列
1234567891011121314151617181920212223242526272829class MyQueue: def __init__(self): self.stack_in = [] self.stack_out = [] def empty(self)-> bool: # 当in和out全空时,为空,两种都可 return not(self.stack_in or self.stack_out) return not self.stack_in and not self.stack_out def push(self, num:int)-> None: # 只倒入到in中 self.stack_in.append(num) def pop(self, num:int)-> int: # 先从in中倒到out中,再从out中倒出来 if self.empt ...


