数据结构与算法
fairy净
这个作者很懒,什么都没留下…
展开
-
排序算法--归并排序
归并排序是建立在归并操作的一种高效的排序方法,该方法采用了分治的思想,比较适用于处理较大规模的数据,但比较耗内存。归并是分而治之的一个典型的应用,所谓归并排序,就是将待排序的数分为两部分后拍好序然后再讲两个拍好序的序列合并成一个有序序列。 分:不断的分直到分到只有一个元素为止。 合:取两个有序数组中的最小的元素放在辅助数组中,通过比较,把所有的元素取出。 ...原创 2018-06-01 09:56:25 · 378 阅读 · 0 评论 -
排序---堆排序的非递归实现
堆排序需要解决两个问题:1.如何由一个无序序列建成一个堆 2.如何在输出堆顶元素后调整剩余元素成为一个新的堆。 其实两个问题就是一个问题,就是如何调整剩余元素成为一个新的堆。 筛选:筛选是从第n/2向下取整个元素开始的,如果看成是完全二叉树,那么肯定是第n/2向下取整的非终端结点。 堆排序:一个无序序列建堆的过程就是一个反复筛选的过程。 def heapsort(data): ...原创 2018-06-05 14:41:59 · 435 阅读 · 0 评论 -
快速排序非递归实现--python
主要思想是:每次把待排序数组分为两部分,左边小于轴右边大于轴,把分开的数组的收尾数组的索引存到辅助栈空间里,替换递归。两种思路: 思路一:严老师数据结构里面的思路 def partition(nums,low,high): high_flag = True low_flag = False pivot = nums[low] w...原创 2018-06-01 14:11:37 · 4270 阅读 · 0 评论 -
二叉树用栈实现前序中序后序--python
# Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def preorderTraversal(self...原创 2018-09-01 14:59:24 · 527 阅读 · 0 评论 -
阿里八卦阵DFS和BFS实现
import copy def getSumBFS(i,j,m,n,maps): #如果是广度优先 先找到所有的邻接点 再依次往下找邻接点 quenue = [[i,j]] sum = maps[i][j] maps[i][j] = 0 while quenue: ###找八个方向 i, j ...原创 2018-06-01 10:13:36 · 542 阅读 · 0 评论 -
topk问题
1. 排序 全局排序时间复杂度O(nlog(n)) 2. 局部排序:冒泡排序 保证了前k个最大数是有序的 时间复杂度O(n*k) 3. 可以不关心前k个数是否有序 堆排 时间复杂度 O(nlog(k)) 堆是经典的求topk的算法 4. 随机选择,基于快速排序,快速排序的核心是:i = partition(arr, low, high),其中i返回的是(初始化元素t = arr[0])的位...原创 2018-10-02 11:29:29 · 199 阅读 · 0 评论 -
数1问题--参考公众号(架构师之路)
1 位移法(遍历)时间复杂度O(n) 2. 求与法:n&(n-1) n 1 0 1 1 0 0 0 0 n-1 1 0 1 0 1 1 1 1 n&(n-1) = 1 0 1 0 0 0 0 0 可以起到消除最末尾1的作用 n 1 0 1 0 0 0 0 0 n-1 1 0 0 1 1 1 1 1 n&(n-1) = 1 0 0 ...转载 2018-10-02 11:53:22 · 185 阅读 · 0 评论 -
DFS非递归
def DFS(root): # 非递归DFS ''' 利用栈完成非递归 1 初始化根节点,标记为访问过,入栈 2 取栈顶元素不出栈: 如果该元素有未访问的邻接点,访问该邻接点,入栈, 如果该元素所有邻接点都被访问或没有邻接点,出栈 ''' ...原创 2018-10-02 17:51:43 · 1043 阅读 · 0 评论 -
leetcode101 对称二叉树
def isSymmetric(self, root): if root is None: return True return self.help(root.left, root.right) def help(self, left, right): ’‘’ 终止条件是左子树和右子树是叶...原创 2018-10-18 20:25:28 · 114 阅读 · 0 评论