
常用算法python实现
文章平均质量分 60
miner_zhu
这个作者很懒,什么都没留下…
展开
-
字符串倒序输出python
对于一个给定的字符串,逆序输出,这个任务对于python来说是一种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,今天总结了一下python中对于字符串的逆序输出的几种常用的方法,一共总结出来了六种方法,个人认为比较全面了,如有其他方法欢迎前来补充方法一:直接使用字符串切片功能逆转字符串方法二:将字符串转换为列表使用reverse函数方法三:新建一...转载 2018-07-23 15:52:01 · 15571 阅读 · 0 评论 -
字符串——字符串中数字子串的求和
【题目】 给定一个字符串str,求其中全部数字串所代表的数字之和。要求如下:忽略小数点字符,例如“A1.3”,其中包含两个数字1和3. 如果紧贴数字子串的左侧出现字符“-”,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数时,则数字视为正。例如,“A-1BC- -12”,其中包含数字-1和12。【举例】 str = “A1CD2E33”返回36. str = ...原创 2018-07-22 09:53:53 · 1929 阅读 · 0 评论 -
字符串——去掉字符串中连续出现k个0的子串
【题目】 给定一个字符串str和一个整数k,如果str中刚好有连续的k个‘0’字符出现时,把k个连续的‘0’字符删除,返回处理后的字符串。【举例】 str = “A00B”,k = 2,返回 “AB”。 str = “A0000B000”,k = 3,返回 “A0000B”。【基本思路】 使用两个变量count和start。count表示目前出现的连续‘0’的个数,...原创 2018-07-22 10:10:30 · 774 阅读 · 1 评论 -
链表问题——合并两个有序的单链表
【题目】 给定两个有序单链表的头节点head1和head2,请合并两个有序链表,合并后的链表依然有序,并返回合并后链表的头节点。【思路】 选择小的head作为头结点,然后将另一个链表的所有节点并入head较小的链表中即可【python】def merge(head1,head2): if head1 == None: return head2 ...原创 2018-07-23 10:18:18 · 363 阅读 · 0 评论 -
数组与矩阵---找到无序数组中最小的k个数
【题目】 给定一个无序的整型数组arr,找到其中最小的k个数。【要求】 如果数组arr的长度为N,排序之后自然可以得到最小的k个数,此时时间复杂度与排序算法的时间复杂度相同,为O(NlogN)。本题要求读者实现时间复杂度为O(Nlogk)和O(N)的方法。【基本思路】 O(Nlogk)的方法。思路很简单,就是一直维护一个大小为k的大根堆,这个堆表示目前选出的k个最小的数。...转载 2018-07-24 10:21:15 · 526 阅读 · 0 评论 -
最长公共子串和最长公共子序列问题python
动态规划 和分治法一样,动态规划(dynamic programming)是通过组合子问题而解决整个问题的解。 分治法是将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解。 动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。 此时,分治法会做许多不必要的工作,即重复地求解公共的子问题。动态规划算法对每个子问题只求...转载 2018-07-22 22:36:44 · 848 阅读 · 1 评论 -
字符串KMP算法详解
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直...转载 2018-07-22 10:45:28 · 195 阅读 · 0 评论 -
八大经典排序基本思想和python实现
一. 插入排序—直接插入排序思路:将待插入元素一个个插入到已有序部分#直接插入排序def insertSort(arr): if len(arr) <= 1: return for i in range(1,len(arr)): temp = arr[i] j = i while j > 0 and arr[j]>temp: arr[j]...原创 2018-07-13 22:10:15 · 449 阅读 · 0 评论 -
二叉树的三种遍历方式(递归、非递归和Morris遍历)
二叉树遍历是二叉树的最基本的操作,其实现方式主要有三种:递归遍历非递归遍历Morris遍历二叉树递归遍历的实现非常容易,非递归实现需要用到栈。而Morris算法可能很多人都不太熟悉,其强大之处在于只需要使用O(1)的空间就能实现对二叉树O(n)时间的遍历。二叉树结点的定义每个二叉树结点包括一个值以及左孩子和右孩子结点,其定义如下:#定义二叉树节点class TreeNode: """docst...原创 2018-07-13 19:42:37 · 297 阅读 · 0 评论 -
层次遍历二叉树(python)
#按层打印def printByLevel(root): if not root: return print("Print binary tree by level") queue = [] queue.append(root) last = root level = 1 print("Level " + str(l...原创 2018-07-22 22:44:52 · 2968 阅读 · 0 评论 -
中缀表达式(infix)转换为后缀表达式(postfix)
算法描述 第一种情况,表达式不含括号。 假设存在一个函数prcd(op1,op2),其中op1和op2是两个操作符(在中缀表达式中,op1在op2的左边),如果op1的优先级高于或等于op2,函数返回True,否则返回False。例如: prcd('\*','+') --> Trueprcd('+','-') --> Trueprcd('\*','/') --&...转载 2018-07-23 18:54:47 · 3704 阅读 · 0 评论 -
字符串---判断两个字符串是否为变形词
【问题】 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词。请实现函数判断两个字符串是否互为变形词。【举例】 str1 = “123”,str2 = “231”,返回True str1 = “123”,str2 = “2331”,返回False【基本思路】 如果两个字符串其中之...原创 2018-07-08 22:29:51 · 599 阅读 · 0 评论