DataStructure&Algorithm
LuffysMan
这个作者很懒,什么都没留下…
展开
-
猴子分桃问题
猴子分桃问题问题描述:方案1方案2笔试的时候碰到一道题, 死活不得其解, 后来看了知乎的一个解答才茅塞顿开;问题描述:有未知数量香蕉一堆, 有m只猴子, 第一只猴子来了之后, 把香蕉分为5堆, 刚好多1个, 于是它吃掉1个, 拿走其中一堆; 第二只猴子来了之后, 同样把香蕉分5堆, 刚好多一个, 于是它吃掉1个, 拿走其中一堆; 剩余猴子依次到来, 做同样的操作; 问这堆香蕉至少有多少个?方案1暴力解: 设置香蕉初始值为1, 看是否满足同样的m次操作; 由于m可能非常大, 通常会超时;方原创 2020-12-30 00:48:22 · 304 阅读 · 0 评论 -
快速排序(荷兰国旗法)
快排(QuickSort)快排是经典的二分法思想的排序方法, 它是不稳定的(即a0, a1的值均为1, 但是排序后可能a1在a0前面, 不保证相对顺序不变).代码实现(python, 荷兰国旗法)"""输入: 数组A, 长度为L. 输出: 排序后的数组A.基本思想: ①select pivot: 从输入数组中随机取一个数字作为基准(pivot); ②partition: 将所有<pivot的数字放到pivot左边, 记为子数组A_left, 所有>pivot的数字放到pivot原创 2021-05-20 16:47:38 · 310 阅读 · 0 评论 -
并查集(DisjointSet)
1. 并查集 并查集可谓非常有用了, 比如用于判断两个节点是否连通, 计算图的连通分量个数, 甚至有一些巧妙的操作"逆向"的解决问题, 比如leetcode803:打砖块 以下是代码实现class UnionFind: def __init__(self, n): """ :n: 并查集节点总数 """ self.__parent = [i for i in range(n)] self.__size = [1]*原创 2021-05-20 15:54:14 · 199 阅读 · 0 评论