自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 【排序】leetcode--第451题--根据字符出现频率排序--(python版)

题目描述给定一个字符串,请将字符串里的字符按照出现的频率降序排列示例 :输入:“tree”输出:“eert”解释:'e’出现两次,'r’和’t’都只出现一次。因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。解题思路按照字符出现的频数进行排序,频数统计使用字典储存,可以考虑使用以下三种方法求解:(1) 调用python自带的sort函数,对字符频数进行排序(2) 利用桶排序,将字符频数相同的字符放进一个桶里,按频数大小,依次将桶里数据读取出来

2020-05-15 10:56:16 686

原创 十大排序算法--基数排序(python版)

基本思想基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序比如说成绩的排序,如果两个人总分相同,则语文高的排在前面,语文成绩也相同则数学高的排在前面如果对数字进行排序,那么个位、十位、百位就是不同优先级的关键字操作步骤(1) 取得数组中的最大数,并取得位数(2) 建立桶数组(3) 按位数的大小分别装进不同的桶里(4) 将原数组清空,将各个桶里的数据依次添加进原列表(5) 再进行前一位的排序,依次循环,直到排序的位数大于最大值的位

2020-05-12 11:25:28 243

原创 十大排序算法--桶排序(python版)

基本思想把数组a划分为n个大小相同子区间(桶),每个子区间各自排序,最后合并。桶排序要求数据的分布必须均匀,不然可能会失效。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况算法描述(1) 设置一个定量的数组当作空桶(2) 遍历输入数据,并且把数据一个一个放到对应的桶里去(3) 对每个不是空的桶进行排序(4) 从不是空的桶里把排好序的数据拼接起来代码def bucket_sort(alist): min_num = min(alist)

2020-05-12 10:27:39 269 1

原创 十大排序算法--计数排序(python版)

定义计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数基本思想对每一个输入的元素a[i],确定小于 a[i] 的元素个数。所以可以直接把 a[i] 放到它输出数组中的位置上。假设有5个数小于 a[i],所以 a[i] 应该放在数组的第6个位置上代码def count_sort(alist): # 找到最大最小值 min_num = min(alist) max_num =

2020-05-12 09:05:58 247

原创 十大排序算法--归并排序(python版)

定义归并排序(mergesort)是创建在归并操作上的一种有效的排序算法该算法是采用分治法的一个非常典型的应用分治法:分割:递归地把当前序列平均分割成两半集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)代码def merge_sort(alist): if len(alist) < 2: return alist # 将列表分成更小的两个列表 mid = int(len(alist)/2) # 分别对左右两个列表进行处理

2020-05-11 23:17:32 163

原创 十大排序算法--选择排序:(2)堆排序(python版)

定义堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。堆排序步骤堆可以分为大根堆和小根堆,这里用最大堆的情况来定义操作:(1) 最大堆调整(max_heap)(2) 建立最大堆(build_max_heap)(3) 堆排序(heap_sort)堆节点位置在阵列起始位置为0的情况:(1) 父节点 i

2020-05-11 22:34:12 168

原创 十大排序算法--选择排序:(1)简单选择排序(python版)

思路选择排序是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。代码def select_sort(alist): n = len(alist) for i in range(n): # 设置索引 i为最小值的索引 min_idx = i # 通过比较,不断调整最小值的索引位置

2020-05-11 15:50:11 106

原创 十大排序算法--插入排序:(2)希尔排序(python版)

思路希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。代码def shell_sort(alist): n = len(alist) # 将数组一共分为 gap列 gap = n // 2 while gap >= 1: # 从第二行开始,对每一列进行

2020-05-11 15:24:09 116

原创 十大排序算法--插入排序:(1)简单插入排序(python版)

思路插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入代码def insert_sort(alist): length = len(alist) for i in range(1,length): for j in range(i, 0, -1): if alist[j] < alist[j - 1]: alist[j], al

2020-05-11 12:12:01 161

原创 十大排序算法--交换排序:(2)快速排序(python版)

思路在一个数据集中取个数作为参考点,大于该数的元素放在其右边;小于该数的元素放在其左边。这样就将数据集分成两部分,大于参考值部分和小于参考值部分,递归该过程,直到序列中所有记录均有序。步骤挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。

2020-05-11 11:06:50 275

原创 十大排序算法--交换排序:(1)冒泡排序(python版)

详解简单来说,就是两两比较冒泡排序是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。代码def bubbleSort(arr): n = len(arr) # n-1的原因是:若列表为6个元素,两两比较,则只需要比较5次 for i in range(n-1): #

2020-05-11 10:06:22 223

原创 【双指针】--leetcode(524)--通过删除字母匹配到字典里最长单词

题目描述给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例1:输入:s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”]输出:“apple”示例2:输入:s = “abpcplea”, d = [“a”,“b”,“c”]输出:“a”解题思路首先将字符串字典按照字母长度和字典顺

2020-05-09 11:18:17 125

原创 【双指针】--leetcode(141)--给定一个链表,判断链表中是否有环(python版)

题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环思路解析使用快慢指针进行判断,若该链表存在环,则快慢指针必会相遇,若该链表不存在环,则快指针必会先达到链表的尾部且指向None具体代码class Solution(object): def hasCycle(self, head): """ :type head: L

2020-05-09 09:49:01 497 4

原创 【双指针】--leetcode(680)--验证回文字符串2(python版)

题目描述:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。思路解析:从题目中可以看出,需要比较字符串的前后字符是否一样,可以考虑使用双指针,一前一后同时进行,时间复杂度为o(n)具体代码:class Solution(object): def validPalindrome(self, s): """

2020-05-08 21:09:29 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除