![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法基础
RealEmperor
这个作者很懒,什么都没留下…
展开
-
【Python】给定两个链表,分别表示两个非负整数。它们的数字逆序存储在链表中,且每个结点只存储一个数字,计算两个数的和,并且返回和的链表头指针
链表相加 示例: 给定两个链表,分别表示两个非负整数。它们的数字逆序存储在链表中,且每个结点只存储一个数字,计算两个数的和,并且返回和的链表头指针。 如:输入:2→4→3、5→6→4,输出:7→0→8Python代码如下:import numpy as np# 定义结单class SNode: pNext = None pValue = None...原创 2018-06-04 17:47:10 · 2529 阅读 · 1 评论 -
【Python】第一个缺失的整数
第一个缺失的整数 给定一个数组A[0…N-1],找到从1开始,第一个不在数组中的正整数。 如3,5,1,2,-3,7,14,8输出4循环不变式思路:将找到的元素放到正确的位置上,如果最终发现某个元素一直没有找到,则该元素即为所求。 循环不变式:如果某命题初始为真,且每次更改后仍然保持该命题为真,则若干次更改后该命题仍然为真。 为表述方便,下面的算法描述从1开始数...原创 2018-06-20 11:41:40 · 1099 阅读 · 3 评论 -
【Python】求数组局部最大值
求局部最大值 给定一个无重复元素的数组A[0…N-1],求找到一个该数组的局部最大值。规定:在数组边界外的值无穷小。即:A[0]>A[-1],A[N-1] >A[N]。 显然,遍历一遍可以找到全局最大值,而全局最大值显然是局部最大值。 可否有更快的办法?算法描述 使用索引left、right分别指向数组首尾。 求中点 mid = ( left + rig...原创 2018-06-19 21:12:26 · 8801 阅读 · 0 评论 -
【Python】收集雨水问题:给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1。若使用这样形状的容器收集雨水,可以盛多少水量?
收集雨水问题 给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1。若使用这样形状的容器收集雨水,可以盛多少水量? 如输入:0,1,0,2,1,0,1,3,2,1,2,1;返回6。 题目来源分析思路: 当水盛满的时候,雨水的面积 = 总面积 - 直方图的面积 从左向右,找比当前柱子1高的第一个柱子2,把柱子1和2之间填充上水,既让...原创 2018-06-08 18:23:19 · 2227 阅读 · 0 评论 -
【Python】直方图矩形面积问题:给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1,试找出直方图中最大的矩形面积
直方图矩形面积 示例: 给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1;试找出直方图中最大的矩形面积。 如:给定高度为:2,1,5,6,2,3,最大面积为8 Python代码如下:import matplotlib.pyplot as pltdef get_area(li): ul = [] # 保存最大面积的数据[[le...原创 2018-06-08 16:33:21 · 2676 阅读 · 1 评论 -
【Python】中缀表达式转后缀表达式(逆波兰表达式RPN)及 后缀表达式计算方法
逆波兰表达式RPN逆波兰表达式Reverse Polish Notation,又叫后缀表达式。 习惯上,二元运算符总是置于与之相关的两个运算对象之间,即中缀表达方法。波兰逻辑学家J.Lukasiewicz于1929年提出了运算符都置于其运算对象之后,故称为后缀表示。 如: 中缀表达式:a+(b-c)*d 后缀表达式:abc-d*+中缀表达式转后缀表达式,Python代码如下:...原创 2018-06-08 13:51:40 · 1056 阅读 · 0 评论 -
【Python】最长括号匹配问题:给定字符串,仅包含左括号‘(’和右括号‘)’,它可能不是括号匹配的,设计算法,找出最长匹配的括号子串
最长括号匹配 示例: 给定字符串,仅包含左括号‘(’和右括号‘)’,它可能不是括号匹配的,设计算法,找出最长匹配的括号子串。算法分析 只有在右括号和左括号发生匹配时,才有可能更新最终解。 计算s[0…i]中左括号数目与右括号数目的差x,若x为0时,考察最终解是否可以更新, 这个差x是入栈的数目,代码中用“深度”deep表达。 由于可能出现左右括号不相等——尤...原创 2018-06-07 18:24:55 · 2745 阅读 · 0 评论 -
【Python】KMP算法
KMP算法 字符串查找问题 给定文本串text和模式串pattern,从文本串text中找出模式串pattern第一次出现的位置。Python代码如下:# 计算next数组def get_next(s): size = len(s) next = list(range(size)) next[0] = -1 k = -1 j =...原创 2018-06-14 15:17:24 · 840 阅读 · 0 评论 -
【Python】给定整数数组A[0…N-1],求这N个数排序后最大间隔
最大间隔 给定整数数组A[0…N-1],求这N个数排序后最大间隔。如:1,7,14,9,4,13的最大间隔为4。 排序后:1,4,7,9,13,14,最大间隔是13-9=4 显然,对原数组排序,然后求后项减前项的最大值,即为解。 可否有更好的方法?问题分析假定N个数的最大最小值为max,min,则这N个数形成N-1个间隔 如果N个数完全均匀分布,则间距全部...原创 2018-06-21 19:58:59 · 1181 阅读 · 0 评论 -
【Python】给定一个数组A[0,…,n-1],求A的连续子数组,使得该子数组的和最大
最大子数组 给定一个数组A[0,…,n-1],求A的连续子数组,使得该子数组的和最大。 例如数组: 1, -2, 3, 10, -4, 7, 2, -5 最大子数组:3, 10, -4, 7, 2算法分析定义:前缀和sum[i] = a[0] + a[1] + …+a[i] 则:a[i,j]=sum[j]-sum[i-1](定义sum[-1] = 0) 算法过程 ...原创 2018-06-21 18:16:52 · 2317 阅读 · 0 评论 -
【Python】字符串的全排列(递归、非递归)
字符串的全排列 给定字符串S[0…N-1],设计算法,枚举S的全排列分析思路: 把s[0]固定在位置0上,[1,n-1]位置的数字全排(递归) 把s[1]固定在位置0上(把s[1]和s[0]交换),[1,n-1]位置的数字全排(递归) …… 如果第i个数字在前面出现过,则跳过 …… 把s[n-1]固定在位置0上(把s[n-1]和s[0]交换),[...原创 2018-06-13 19:12:51 · 10174 阅读 · 6 评论 -
【Python】对于长度为N的数组A,求连续子数组的和最接近0的值
零子数组 求对于长度为N的数组A,求连续子数组的和最接近0的值。 如:数组A=[1, -2, 3, 10, -4, 7, 2, -5]它的所有连续子数组中,和最接近0的是哪个?算法思路申请比A长1的空间sum[-1,0…,N-1],sum[i]是A的前i项和。定义sum[-1] = 0 对sum[-1,0…,N-1]排序,然后计算sum相邻元素的差的绝对值,最小值即为...原创 2018-06-20 20:03:29 · 1796 阅读 · 0 评论 -
【Python】最长公共子序列LCS
LCS的定义最长公共子序列,即Longest Common Subsequence,LCS。 一个序列S任意删除若干个字符得到新序列T,则T叫做S的子序列; 两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列。 字符串13455 与245576的最长公共子序列为455 字符串acdfg与adfc的最长公共子序列为adf 注意区别最长公共子串(Longest C...原创 2018-06-12 19:36:02 · 15902 阅读 · 0 评论 -
【Python】对一个有向无环图(Directed Acyclic Graph,DAG)G进行拓扑排序
拓扑排序 示例: 对一个有向无环图(Directed Acycqc Graph,DAG)G进行拓扑排序,是将G中所有顶点排成线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前 一种可能的拓扑排序结果2->8->0->3->7-&am原创 2018-06-05 19:17:17 · 11774 阅读 · 3 评论 -
【Python】BFS广度优先搜索解决权值相同的最短路径问题
BFS广度优先搜索 示例: 给定如图所示的无向连通图,假定图中所有边的权值都为1,显然,从源点A到终点T的最短路径有多条,求不同的最短路径算法分析 权值相同的最短路径问题,则单源点Dijkstra算法退化成BFS广度优先搜索,假定起点为0,终点为N: 结点步数step[0…N-1]初始化为0 若从当前结点i扩展到邻接点j时:   若ste...原创 2018-06-05 17:08:07 · 3871 阅读 · 0 评论 -
【Python】通过栈实现括号匹配
括号匹配 示例: 字符串中有括号”()[]{}”。设计算法,判断该字符串是否有效 括号必须以正确的顺序配对,如:“()”、“()[]”是有效的,但“([)]”无效Python代码如下:def match_parentheses(s): # 把一个list当做栈使用 ls = [] parentheses = "()[]{}" for i ...原创 2018-06-05 11:35:51 · 12008 阅读 · 0 评论 -
【Python】给定一个链表,翻转该链表从m到n的位置。要求直接翻转而非申请新空间
链表翻转 示例: 给定一个链表,翻转该链表从m到n的位置。要求直接翻转而非申请新空间。 如:给定1→2→3→4→5,m=2,n=4,返回1→4→3→2→5。 假定给出的参数满足:1≤m≤n≤链表长度。# 定义节点class SNode: Next = None Value = None# 创建带头结点的链表def createLinkLis...原创 2018-06-04 19:53:53 · 1410 阅读 · 0 评论 -
【Python】字符串循环左移
字符串循环左移 给定一个字符串S[0…N-1],要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部,得到新字符串“cdefab”:即字符串循环左移k位。 循环左移k位等价于循环右移n-k位。 算法要求: 时间复杂度为 O(n),空间复杂度为 O(1)。分析思路:暴力移位: 每次循环左移1位,调用k次...原创 2018-06-11 19:13:02 · 7947 阅读 · 0 评论 -
【Python】查找旋转数组的最小值
查找旋转数组的最小值 假定一个排序数组以某个未知元素为支点做了旋转,如:原数组0 1 2 4 5 6 7旋转后得到4 5 6 7 0 1 2。请找出旋转后数组的最小值。假定数组中没有重复数字。分析思路旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素 4 5 6 7 0 1 2 注意到实际上最小的元素就是两个子数组的分界线。用索引...原创 2018-06-20 12:21:14 · 1238 阅读 · 0 评论