leetcode
小鹏酱
这个作者很懒,什么都没留下…
展开
-
回溯算法
原文链接:https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-xiang-jie-by-labuladong-2/ 回溯算法框架: 解决回溯算法的关键是想清楚如下几点: 1.路径,已经经过的路径 2.选择列表,当前可选择的列表 3.终止条件 基本框架代码: result = [] def dfs(路径,选择列表): if 满足终止条件: result.append(路径) for 选择 in 选择列表:原创 2020-06-12 19:34:26 · 169 阅读 · 0 评论 -
python实现快速排序
Quick_Sort 简介:快速排序是冒泡排序的一种改进,通过一趟排序将数据分割成独立的两部分,其中一部分的所有数据比另一部分都要小,然后按此方法对两部分进行快速排序。整个排序过程可以递归进行,直至最终序列为有序序列。 特点:每一趟排序可以确定一个数字的最终位置。 原理:(1)从数据中选取基准 (2)分区,小于基准的数据移到左边,大于基准的数据移到右边 (3)对基准左右两个子集,重复步骤一、二 实...原创 2020-04-07 13:45:49 · 219 阅读 · 0 评论 -
python实现堆排序
堆排序 概念: 二叉堆,二叉堆本质上是一种完全二叉树,可以分为最大堆和最小堆两种。最大堆:任何一个父节点的值都大于等于其子节点的值;最小堆:任何一个父节点的值都小于等于其子节点的值。 二叉堆的根节点叫堆顶,二叉堆的特点决定了最大堆的堆顶是整个堆数据中的最大值,最小堆的堆顶是整个堆数据中的最小值。 堆的自我调整: 插入节点:首先将节点插入到堆尾,然后判断新插入的节点与其父节点是否满足最大/小堆的概念...原创 2020-04-09 22:19:25 · 875 阅读 · 0 评论 -
广度优先遍历(BFS)和深度优先遍历(DFS)
BFS: 思想: 对于图中的初始节点,先遍历初始节点的一阶邻居,当初始节点的一阶邻居都被遍历完了之后,再遍历初始节点的二阶邻居,直至所有节点都被遍历完(或找到符合条件的节点) 过程: 三要素:(1)先入先出的一个容器:队列;(2)图中的节点:最好写成单独的一个类表示;(3)已访问集合:避免重复访问。 算法过程: (1)首先将根节点放入队列中 (2)取出队列中的第一个节点进行访问,并将其所有未被访问的邻居节点添加到队列中 (3)若队列为空则算法结束 时间复杂度: 广度优先遍历算法的时间复杂度并不确定,取决于用原创 2020-06-11 15:00:56 · 332 阅读 · 0 评论 -
递归和动态规划的初步理解
首先通过斐波那契数列引出两个概念 斐波那契数列: 已知f(0)=0, f(1)=1, f(n)= f(n-1)+ f(n+2)分别用两种不同的思想求得 f(n)。 1.递归: 解决递归问题,首先要明确函数定义,然后寻找递归终止条件,最后要能够准确的写出递归子式。 def F(n): if n == 0: return 0 if n == 1: return 1 return F(n-1) + F(n-2) 但在上述递归代码中有好多是会重复计算的,为了原创 2020-06-03 10:53:59 · 170 阅读 · 0 评论 -
力扣刷题215.数组中的第K个最大元素(python)
215.数组中的第K个最大元素 题目描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-...原创 2020-04-10 10:44:26 · 689 阅读 · 0 评论