
算法
sasemi
这个作者很懒,什么都没留下…
展开
-
二叉树的遍历和重构,二叉搜索树(python)
文章目录二叉树遍历前序遍历中序遍历后序遍历层次遍历重构二叉搜索树特点构建及相关操作简单拓展:AVL二叉树遍历构建树节点class TreeNode(object): def __init__(self,data): self.data=data self.lchild=None self.rchild=None前序遍历root-左-右def pre_track(root): if root: print(root,end=",") pre_track(root.lchi原创 2020-08-13 13:07:55 · 453 阅读 · 0 评论 -
数据结构-数组二分查找和单链表
数据结构与算法,为内功心法,需要时间的沉淀和勤奋的练习,本文为了准备面试,捋一下非常基本的数据结构,比如链表只写了单链表。数组简单的一维数组在python里面的操作实际上就是操作list。可能的面试题:排序,另一篇我的博客里面全是针对数组的排序。重点掌握快排和归并排序。查找:二分查找的递归写法和非递归写法。递归写法def binary_search_1(nums,target,left,right): if left>right: return -1 mid=(left+ri原创 2020-08-12 17:36:12 · 282 阅读 · 0 评论 -
堆排序(python)
前两天面试被问到堆,于是学习了一下堆排序堆相关的二叉树基础堆实际上是一个完全二叉树,所以先了解一下二叉树。二叉树(binary tree)是指树中节点的度不大于2的有序树。划重点,度不大于2,有序。一些重要性质:在二叉树的第层 i 最多有 2^(i-1) 个结点。深度为k(k>=0)的二叉树最少有k个结点,最多有 2^k-1 个结点。对于任一棵非空二叉树,若其叶结点数为n0,度为2的非叶结点数为n2,则n0=n2+1。具有n个结点的完全二叉树的深度为比 log2(n+1) 大的第一个整原创 2020-08-12 12:52:07 · 389 阅读 · 0 评论 -
数据结构-栈及应用(python)
写一个栈栈,先进后出,想象一群人排队进了个死胡同,最先进去的人想出来得等后面的人都出来了才能出来。栈在python里面完全可以用列表实现class Stack(object): def __init__(self): self.lis=[] def is_empty(self): return len(self.lis)==0 def push(self,val): self.lis.append(val)原创 2020-07-28 13:32:46 · 235 阅读 · 0 评论 -
单链表合并/排序,爬N阶楼梯M种爬法(python)
单链表排序单链表的特点是不知道全长,只能从前往后遍历,如果用归并,就要找中点,怎么找呢,快慢指针,慢指针每次走一步,快指针每次走两步,当快指针走到头的时候刚好慢指针走了一半。class ListNode(object): def __init__(self,x): self.val=x self.next=Noneclass Solution(object): def sortList(self,head): if not head o原创 2020-07-27 15:17:20 · 291 阅读 · 0 评论 -
经典算法梳理-贪心算法(python)
文章目录基本找零问题leetcode 860:柠檬水找零leetcode 455: 分发饼干leetcode 575: 分糖果部分背包问题leetcode 435:无重叠区间leetcode 122: 买卖股票的最佳时机 II基本找零问题假设商店老板需要找零n元钱,钱币的面额有:100元、50元、20元、5元、1元,如何找零使得所需钱币的数量最少?思路:每一次尽可能用面值最大的钱币。def give_change(n,money): res=[] for ii: i原创 2020-05-17 22:06:31 · 777 阅读 · 2 评论 -
经典算法梳理-回溯(python)
文章目录回溯八皇后问题全排列(排列组合)括号生成整理回溯法经典问题。回溯回溯法又叫试探法,算法核心是深度优先搜索,就是假设第一步,再假设第二步一直死磕到头,看能不能走通,走不通咱就回去,重新走,可以退一步重新走,也可以一直退到第一步。直到找到可以走通的路线。如果小时候玩过迷宫游戏就能深刻体会到这个算法就是你心中所想的过程。八皇后问题八皇后问题是有一个8X8的棋盘,要把八个皇后放上去,条件是,每一个皇后的米子区域都不能有其他皇后,如下图,假如放进去了第一个皇后,灰色区域就不能再放任何皇后。我们现原创 2020-05-15 23:55:18 · 571 阅读 · 0 评论 -
经典算法梳理-排序算法
文章目录排序算法冒泡排序选择排序插入排序希尔排序归并排序快速排序搜索算法递归回溯法贪心DP其他排序算法为了测试各个算法的复杂度,直接用以下程序生成10000个数字的列表进行排序:import randomlis = [random.randint(1,1000) for ii in range(10000)]首先测试内置排序算法sorted()函数的运行时间,sorted()函数使用的是归并排序,后面也会复现。import timestart=time.time()base_sort=so原创 2020-05-12 23:08:57 · 216 阅读 · 0 评论