![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 82
weixin_43571751
这个作者很懒,什么都没留下…
展开
-
基础数学算法
基础数学等差数列求最大公约(因)数求最小公倍数等差数列等差数列 an 的通项公式:an = a1 + ( n - 1) *d。其中,d为公差,a1为起始项,n为第n项。等差数列求和公式:前n项和公式为:Sn = na1 + n(n - 1) * d / 2题目:等差数列 2,5,8,11,14。。。。(从 2 开始的 3 为公差的等差数列),输出求等差数列前n项和。n = int(input())print(int(n*2+n*(n-1)*3/2))求最大公约(因)数辗转相除法求最大公约数原创 2022-01-03 23:24:13 · 472 阅读 · 0 评论 -
LeetCode---动态规划
LeetCode---动态规划动态规划动态规划原创 2021-04-07 23:21:14 · 227 阅读 · 0 评论 -
LeetCode---二叉树
二叉树二叉树种类二叉树有两种主要的形式:满二叉树和完全二叉树。满二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。这棵二叉树为满二叉树,也可以说深度为k=4,有2^k-1=15个节点的二叉树。完全二叉树**完全二叉树:**在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1个节点。二叉搜索树二叉搜索树是原创 2021-03-26 00:00:42 · 171 阅读 · 1 评论 -
LeetCode---栈和队列
LeetCode---栈和队列LeetCode232. 用栈实现队列解225. 用队列实现栈解20. 有效的括号解1047. 删除字符串中的所有相邻重复项解150. 逆波兰表达式求值解239. 滑动窗口最大值解347. 前 K 个高频元素解LeetCode232. 用栈实现队列题目链接解采用两个栈,加入新元素时先把栈1中的元素全部弹出到栈2中,再把新元素压入到栈1中。然后把栈2中的元素重新压入到栈1中。class MyQueue: def __init__(self):原创 2021-03-24 23:34:27 · 126 阅读 · 0 评论 -
LeetCode---字符串
LeetCode344. 反转字符串题目链接解:双指针def reverseString(s): left = 0 right = len(s) - 1 while left <= right: s[left], s[right] = s[right], s[left] left += 1 right -= 1 return s541. 反转字符串 II题目链接解:暴力法 if len(s)原创 2021-03-21 15:03:50 · 102 阅读 · 0 评论 -
LeetCode---哈希表
LeetCode---哈希表哈希表哈希表能解决的问题哈希碰撞哈希碰撞的解决办法线性探测 Linear Probing拉链法LeetCode242. 有效的字母异位词解第349题. 两个数组的交集解202. 快乐数解1. 两数之和解454. 四数相加 II解15. 三数之和解哈希表哈希表是根据关键码的值进行访问的数据结构,例如:python中的dict。list也可以称为hash表,可以通过下标直接访问某个元素。哈希表能解决的问题一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是原创 2021-03-17 23:59:58 · 173 阅读 · 1 评论 -
LeetCode---数组
LeetCode---数组数组数组的特点LeetCode35. 搜索插入位置解数组数组的特点参考公众号:代码随想录数组在内存中的存储方式:数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。正是因为数组的在内存空间的地址是连续的,所以在删除或者增添元素的时候,就难免要移动其他元素的地址。不同语言在二维数组的实现上有差异,python中二维数组的地址空间有可能不是连续的。如图三:如果二维数组中增加一个元素,新增元素的地址与当前子数原创 2021-03-14 14:05:09 · 123 阅读 · 0 评论 -
LeetCode---搜索算法
搜索算法图图Graph的概念图是一种由节点和边构成的数据结构,实际上树也是一种特殊的图。图可以用来表示现实世界中的很多事物:道路交通系统、航班线路、互联网连接等等。顶点Vertex (节点Nond):是图的基本组成部分,顶点具有名称标识key,也可以携带数据项payload。边Edge(弧Arc):作为两个顶点之间关系的表示,边连接两个顶点;边可以是无向或有向的,相应的图称为“无向图”和“有向图”。权重Weight:为了表达从一个顶点到另一个顶点的代价,可以给边赋权;例如公交网中的两个站点之间的原创 2021-03-03 23:32:39 · 277 阅读 · 1 评论 -
LeetCode---二分查找
二分查找二分查找也称折半查找(Binary Search),是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。基本代码框架# 基本代码框架def binarySearch(nums, target): left = 0 # right = len(nums) - 1 搭配 while left <= right使用; # right = len(nums) 搭配 while left < right原创 2021-03-02 23:38:44 · 107 阅读 · 0 评论 -
LeetCode---贪心算法
455. 分发饼干题目链接解法1# 时间复杂度:主要是排序的时间复杂度O(mlogm+nlogn)# 空间复杂度:O(logm+logn),其中 m 和 n 分别是数组 g 和 s 的长度。空间复杂度主要是排序的额外空间开销。def findContentChildren(g, s): # 1. 先对g和s升序排序 g.sort() s.sort() # 2. 因为孩子胃口和饼干都已经排过序,所以从小到大选择每个孩子能满足每个孩子胃口的最小饼干(贪心算法)原创 2021-02-21 22:29:32 · 224 阅读 · 0 评论 -
LeetCode---排序
经典排序算法1. 冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤原创 2021-02-12 23:45:15 · 126 阅读 · 0 评论 -
python 数据结构与算法2
1 查找和排序1.1 查找1.1.1 顺序查找算法及算法分析1.1.2 二分查找算法及算法分析def search(num, num_list): # 最小规模 if len(num_list) == 1: return num_list[0] == num middle = len(num_list)//2 if num_list[middle] == num: return True # 减小规模 el原创 2021-02-07 22:34:43 · 181 阅读 · 1 评论 -
python 数据结构与算法1
python 数据结构与算法1 python常见数据结构性能1.1 List1.1.1 安索引取值和赋值1.1.2 列表append和__add__()1.1.3 使用timeit模块测试执行时间1.1.4 List基本操作的大O数量级1.2 Dict1.2.1 dict数据类型2 线性结构 Linear Structure2.1 栈Stack2.1.1 抽象数据类型Stack2.1.2 Stack的操作如下2.1.3 栈的应用1:简单括号匹配2.1.3.1 圆括号匹配2.1.3.2 通用括号匹配2.1.4原创 2021-02-03 17:25:15 · 177 阅读 · 2 评论