算法笔记
ywm_up
这个作者很懒,什么都没留下…
展开
-
python二进制字符串和整数互相转换
将二进制字符串转为整数num = "10011"print(int(num, 2))输出19将整数转为二进制字符串number = 19print("{:b}".format(number))输出10011原创 2021-08-23 09:35:24 · 2469 阅读 · 0 评论 -
排序方法:插入、冒泡、选择、希尔、归并、堆排序,时空复杂度,原理图解,python 实现
文章目录各类排序算法时空复杂度、稳定性对比1. 插入排序1.1 直接插入排序1.2 折半插入排序2. 冒泡排序3. 选择排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序完整测试代码各类排序算法时空复杂度、稳定性对比序号排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定1插入排序O(n2)O(n2)O(1)是2冒泡排序O(n2)O(n2)O(1)是3选择排序O(n2)O(n2)O(1)不是4希尔排序O(nlogn原创 2021-08-16 15:45:58 · 582 阅读 · 0 评论 -
python 用 list 初始化一棵二叉树
二叉树结点包括:值域:val左子树指针:left右字数指针:right用 list 构造二叉树的思路是,当前结点的下标与左右子树满足数学关系:left_index = 2 * cur_index + 1right_index = 2 * cur_index + 2再用递归的方式构造左右子树class TreeNode: def __init__(self, x): self.val = x self.left = None se原创 2021-08-12 11:20:28 · 961 阅读 · 1 评论 -
python 用 list 初始化一个链表
# 首先定义结点类,链表结点包括值域 val,和 next 指针class ListNode: def __init__(self, x): self.val = x self.next = Noneclass LinkList: def __init__(self): self.head = None def init_linklist(self, data): # 用 list 初始化一个 linklis原创 2021-08-12 11:10:25 · 646 阅读 · 0 评论 -
python 二叉树遍历方法大全:先序、中序、后续、递归、非递归、层次
闲来无事,又重新复习了一下二叉树遍历,拉到最后有完整的测试代码和运行结果。1. 二叉树的先序遍历(非递归算法)def preorder_traversal(root): # 方法1 stack = [] cur = root while len(stack) != 0 or cur is not None: while cur is not None: # 一直到最左下 print(cur.val) sta原创 2021-08-12 11:01:48 · 4324 阅读 · 0 评论 -
【数据结构必背算法】——线性表操作python实现
以下五个算法在数据结构中常考,必须记住!逆转线性表删除线性链表中数据域为 value 的所有结点逆转线性链表复制线性链表(递归)将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表1. 逆转线性表def reverse_list(nums): """逆转线性表,双指针从左右往中间靠""" if len(nums) < 2: return nums left, right = 0, len(nums) - 1 while left原创 2021-08-11 10:36:48 · 665 阅读 · 0 评论 -
大数取余方法
在 int32 的存储条件下,大数计算乘法,可能会超出数值范围,导致返回值错误1. 循环求余法把指数操作转换成一次次的乘法,每次相乘就取以此余数,使得数值不超过范围// 求 (x^a) % p —— 循环求余法public int remainder(x, a, p){ int rem = 1; while(a--){ rem = (rem * x) % p; } return rem;}2. 快速幂取余计算a^n % b,其中a,b和n都原创 2021-03-09 17:08:27 · 4955 阅读 · 0 评论 -
排序方法java实现
各类算法时空复杂度、稳定性对比归并和快排是重点排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序O(n2)O(n2)O(1)是选择排序O(n2)O(n2)O(1)不是直接插入排序O(n2)O(n2)O(1)是希尔排序O(nlogn)O(ns)O(1)不是归并排序O(nlogn)O(nlogn)O(n)是快速排序O(nlogn)O(n2)O(logn)不是一、冒泡排序时间复杂度最好原创 2021-03-09 17:07:04 · 120 阅读 · 0 评论 -
树的遍历方法Java实现
二叉树的先、中、后层次遍历,递归非递归,DFS、BFS先序遍历1. 递归一般来说,递归遍历比非递归的好写,理解起来也比较简单,不过相比非递归的效率差一些/**这题要求先序遍历二叉树,把遍历结果存储在 list 中,并返回*/class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> preOrderList = new ArrayLi原创 2021-03-09 17:06:27 · 257 阅读 · 0 评论 -
最小生成树算法——Prime算法、kruskal算法
两种算法都是用于求带权无向图的最小生成树,最小生成树即代价值最小的树。一、Prime算法通俗又称加点法原创 2020-04-04 14:10:37 · 2592 阅读 · 0 评论 -
图的搜索算法——深度优先搜索DFS、广度优先搜索BFS
深度优先搜索算法(DFS)和广度优先搜索算法(BFS)都是图的搜索算法,放在一起研究比较容易发现他们的特点一、深度优先搜索算法(DFS)思想:前提是每个结点只能访问一次,对每个分支深入到不能再深入为止,再回退访问另一个分支可以用栈来实现DFSDFS可以判断图中是否有回路。当前结点的下一步可以搜索到已经访问过的结点,则说明有回路例:从结点1开始深搜图存储在邻接矩阵的搜索过程邻接矩...原创 2020-04-03 21:01:14 · 1192 阅读 · 0 评论 -
用递归法将一个不确定位数的整数n转换成字符串
题目描述:用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”,n的位数不确定,可以是任意位数的整数。代码#include <stdio.h>void Convert(int n); //函数声明void main(){ int n; printf("please input an integer:"); scanf("%d",&...原创 2020-03-07 15:21:01 · 738 阅读 · 0 评论 -
负数取模
作者:丰俊文链接:https://www.jianshu.com/p/452c1a5acd31来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。对于整数的取模运算,想必大家已经比较熟悉了,譬如说 7 对 3 取模,结果是多少,我们可以按照小学的公式:被除数÷除数=商……余数 来推算:7 ÷ 3 = 2 … 1那么结果是 1。对于正整数来说,上面的计算没有问...转载 2020-02-25 10:57:25 · 198 阅读 · 0 评论