![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python算法
海人001
爱码仕
展开
-
贪心-吃糖
医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i]。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的 最多 种类数。原创 2022-09-27 09:28:05 · 285 阅读 · 0 评论 -
滑动窗口平均值
【代码】滑动窗口平均值。原创 2022-09-26 18:57:43 · 590 阅读 · 0 评论 -
python二叉堆
定义二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。二叉堆一般用数组来表示。如果根节点在数组中的位置是1,第n个位置的子节点分别在2n和 2n+1。因此,第1个位置的子节点在2和3,第2个位置的子节点在4和5。以此类推。这种基于1的数组存储方式便于寻找父节点和子节点。二叉堆的根节点叫做堆顶。最大堆和最小堆的特点原创 2020-08-31 16:09:32 · 12272 阅读 · 0 评论 -
python树
树的一些定义节点节点是树的基本部分。它可以有一个名称,我们称之为“键”。节点也可以有附加信息。我们将这个附加信息称为“有效载荷”。虽然有效载荷信息不是许多树算法的核心,但在利用树的应用中通常是关键的。边边是树的另一个基本部分。边连接两个节点以显示它们之间存在关系。每个节点(除根之外)都恰好从另一个节点的传入连接。每个节点可以具有多个输出边。根树的根是树中唯一没有传入边的节点。在 Figure 2 中,/ 是树的根。路径路径是由边连接节点的有序列表。例如,Mammal→原创 2020-08-28 11:07:22 · 11939 阅读 · 0 评论 -
python排序下
希尔排序希尔排序使用增量i(有时称为 gap ),通过选择 i 个项的所有项来创建子列表。对子列表进行差值排序,最后进行一次插值排序子列表插值排序全局插值排序归并排序归并排序是一种递归算法,不断将列表拆分为一半。 如果列表为空或有一个项,则按定义(基本情况)进行排序。如果列表有多个项,我们分割列表,并递归调用两个半部分的合并排序。 一旦对这两半排序完成,就执行称为合并的基本操作。合并是获取两个较小的排序列表并将它们组合成单个排序的新列表的过程。#递归基本条件递归..原创 2020-08-26 17:52:49 · 11706 阅读 · 0 评论 -
python排序
冒泡排序冒泡排序需要多次遍历列表。它比较相邻的项并交换那些无序的项。每次遍历列表将下一个最大的值放在其正确的位置(靠右)。实质上,每个项“冒泡”到它所属的位置。def bubbleSort(alist): for passnum in range(len(alist)-1,0,-1): #冒泡排序每次都会将最大值靠右排序,所以下次排序就不惜要比较最后一个值了,他的循环次数也是 n,n-1,n-2的递减 for i in range(passnum): .原创 2020-08-20 15:03:36 · 12008 阅读 · 0 评论 -
python搜索算法
顺序查找从列表中的第一个项目开始,我们按照基本的顺序排序,简单地从一个项移动到另一个项,直到找到我们正在寻找的项或遍历完整个列表。如果我们遍历完整个列表,则说明正在搜索的项不存在。def sequentialSearch(alist, item): pos = 0 found = False while pos < len(alist) and not found: if alist[pos] == item: found原创 2020-08-18 19:33:29 · 12241 阅读 · 0 评论 -
python递归
什么是递归递归是一种解决问题的方法,将问题分解为更小的子问题,直到得到一个足够小的问题可以被很简单的解决。通常递归涉及函数调用自身。递归允许我们编写优雅的解决方案,解决可能很难编程的问题。递归的三定律1. 递归算法必须具有基本情况。 2. 递归算法必须改变其状态并向基本情况靠近。 3. 递归算法必须以递归方式调用自身。递归实例def listsum(numList): if len(numList) == 1: return numList.pop() #基原创 2020-08-17 14:31:46 · 12086 阅读 · 0 评论 -
python链表
链表的结构是项的集合,其中每个项保持相对于其他项的相对位置。python链表常用的函数一个简单地项class Node: def __init__(self,initdata): self.data = initdata self.next = None def getData(self): return self.data def getNext(self): return self.next...原创 2020-08-14 16:07:02 · 12113 阅读 · 0 评论 -
python队列
目录什么是队列队列常用的函数入队与出队的时间复杂度code什么是队列队列是项的有序集合,其中添加新项的一端称为队尾,移除项的一端称为队首。当一个元素从队尾进入队列时,一直向队首移动,直到它成为下一个需要移除的元素为止。最近添加的元素必须在队尾等待。集合中存活时间最长的元素在队首,这种排序成为 FIFO,先进先出,也被成为先到先得。队列的最简单的例子是我们平时不时会参与的列。排队等待电影,在杂货店的收营台等待,在自助餐厅排队等待(这样我们可以弹出托盘栈)。行为良好的线或队列是有限制.原创 2020-08-13 19:13:41 · 12095 阅读 · 0 评论 -
python栈
前言引自书中:栈(有时称为“后进先出栈”)是一个项的有序集合,其中添加移除新项总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。栈的底部很重要,因为在栈中靠近底部的项是存储时间最长的。最近添加的项是最先会被移除的。这种排序原则有时被称为 LIFO,后进先出。它基于在集合内的时间长度做排序。较新的项靠近顶部,较旧的项靠近底部。栈的函数利用栈实现括号缺失检测from pythonds.basic.stack import Stacks_dict = {"{":"}",原创 2020-08-11 17:38:00 · 11692 阅读 · 0 评论 -
python字典主要方法及内容
摘自书中引言python 中第二个主要的数据结构是字典。你可能记得,字典和列表不同,你可以通过键而不是位置来访问字典中的项目。在本书的后面,你会看到有很多方法来实现字典。字典的 get和 set 操作都是 O(1)。另一个重要的操作是 contains,检查一个键是否在字典中也是 O(1)。所有字典操作的效率总结在 Table中。关于字典性能的一个重要方面是,我们在表中提供的效率是针对平均性能。 在一些罕见的情况下,contains,get item 和 set item 操作可以退化为O(n)。.原创 2020-08-11 14:27:00 · 11629 阅读 · 0 评论 -
python列表的性能
前言最近开始学习算法,python书籍为 《python-data-structure-cn》引自书中:python 的设计者在实现列表数据结构的时候有很多选择。每一个这种选择都可能影响列表操作的性能。为了帮助他们做出正确的选择,他们查看了最常使用列表数据结构的方式,并且优化了实现,以便使得最常见的操作非常快。当然,他们还试图使较不常见的操作快速,但是当需要做出折衷时,较不常见的操作的性能通常牺牲以支持更常见的操作。常见操作及时间复杂度pop() 、pop(i) 、sort()测试p原创 2020-08-11 11:47:28 · 11939 阅读 · 0 评论 -
python3解最长回文子串
Q给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"Adef longestPalindrome_dp(s: str) -> str: end = len(s) if ...原创 2019-12-23 13:39:04 · 10441 阅读 · 0 评论 -
python解无重复字符的最长子串
Q给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长...原创 2019-12-13 17:25:36 · 10383 阅读 · 1 评论 -
Python解链表两数相加
Q给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。A# Definition for singly-linked list.# class ListNode:# d...原创 2019-12-13 10:47:18 · 10334 阅读 · 0 评论 -
python3解两数之和
Q给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。Aclass Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: ...原创 2019-12-12 11:24:23 · 10350 阅读 · 0 评论