掘友等级
获得徽章 8
#刷题交流#
二叉树的插入操作:
从根节点开始,找到合适的位置插入新节点:
如果新值小于当前节点,向左子树递归插入。
如果新值大于当前节点,向右子树递归插入。
创建并插入新节点。
def insert(root, key):
if root is None:
return Node(key)
if key < root.val:
root.left = insert(root.left, key)
else:
root.right = insert(root.right, key)
return root
#刷题交流#
策略大师:小I与小W的数字猜谜挑战
通过递归和分治的思想,我们可以逐步计算出小I在不同范围内的获胜概率,最终得到小I在整个范围内的获胜概率。
#刷题交流#
61、啊D的最佳飞行路线探索
广度优先搜索(BFS):
从队列中取出一个机场和当前的起飞次数。
如果该机场是终点机场(airports[-1]),返回当前的起飞次数。
否则,将该机场标记为已访问。
将该机场的相邻机场(i-1和i+1)以及同一家航空公司的其他机场加入队列,并更新起飞次数。
#刷题交流#
63、视频推荐的算法
解析输入数据:将输入的字符串转换为整数列表。
排序数据:对整数列表进行升序排序。
计算位置:根据数据的长度计算80百分位数的位置。
获取值:根据计算的位置获取对应的数值。
#刷题交流#
处理连续两次操作的奇偶性限制。可以通过在动态规划的状态中引入一个维度来表示当前操作的奇偶性,从而确保连续两次操作的奇偶性不同。
定义状态:
使用一个二维DP数组dp[i][j],其中i表示当前处理到字符串的第i个字符,j表示当前操作的奇偶性(0表示偶数次操作,1表示奇数次操作)。
dp[i][j]表示在前i个字符中,最后一次操作的奇偶性为j时,可以获得的最大Cion币数。
状态转移:
对于每个字符,需要考虑以下几种情况:
替换操作:如果当前字符和前一个字符相同,我们可以进行替换操作。替换操作的奇偶性需要与上一次操作的奇偶性不同。
删除操作:可以删除当前字符,删除操作的奇偶性也需要与上一次操作的奇偶性不同。
初始化:
初始状态可以设为dp[0][0] = 0和dp[0][1] = -inf,表示在处理第一个字符之前,不进行任何操作。
最终结果:
最终结果为max(dp[n][0], dp[n][1]),其中n是字符串的长度。
#刷题交流#
哈夫曼编码的核心在于它是一种贪心算法。每一步都选择当前局部最优的选择,即选择出现频率最低的字符进行合并,以确保最终树的深度最小,从而实现编码最大压缩。
#刷题交流#
哈夫曼编码是一种用于数据压缩的算法,由大卫·哈夫曼在1952年提出。其主要原理是利用字符出现的频率来构建一棵二叉树,从而生成可变长度的编码,使得常用字符的编码较短,而不常用字符的编码较长,从而在整体上实现数据压缩。
#刷题交流#
打卡、128、《找出最长的神奇数列》
这个问题主要运用了滑动窗口和双指针的思想。
滑动窗口:用于动态地扩展和收缩当前正在检查的子序列。
双指针:用于遍历序列并记录当前子序列的起始位置和长度。
解题之后用MarsCode AI 提取算法思想,加深理解
#刷题交流#
打卡、今日刷题,线上报警问题分类,解题思路:
初始化用户实验集合、遍历 arrayN,将每个用户的实验命中情况存储在集合中。
处理查询、对于每次查询,遍历所有用户,检查其实验命中情况是否符合查询条件。
使用一个辅助函数 check_user_matches_query 来检查用户是否符合当前查询条件。
返回结果、将每次查询的结果存储在列表中,并返回该列表。
#刷题交流#
补卡:43、《还原原始字符串》的中使用用于 BFS 来模拟操作过程。
BFS(Breadth-First Search,广度优先搜索)是一种用于图和树的遍历算法。它从根节点(或起始节点)开始,逐层遍历图或树的节点,直到找到目标节点或遍历完所有节点。BFS 通常使用队列(Queue)来实现,确保每一层的节点都被访问后再访问下一层的节点。
def bfs(graph, start):
# 初始化队列和已访问集合
queue = deque([start])
visited = set([start])
while queue:
node = queue.popleft()
print(node) # 访问节点
# 遍历当前节点的邻居节点
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
下一页