算法
JeJe_33
金融ITdoge
展开
-
排序算法小结
1.二分法利用元素间次序关系,将元素集进行对半查询时间复杂度O(logn)思路:二分法遍历数组,直到找到数组下标与元素不符的情况 if nums == []: return 0 if nums[-1]==len(nums)-1: return len(nums) left = 0 right = len(nums)-1 while left<right: if nums[(left+right)//2] != (left+right)//原创 2021-02-10 17:33:44 · 335 阅读 · 0 评论 -
单调栈算法
维护一个单调栈,正序排列,进行遍历,不满足条件放入栈,满足条件则对栈内元素所在位置处理,遍历一次后所有元素解决单调栈分为单调递增栈或单调递减栈,适用于需要比较大小关系且与元素位置有关的问题单调栈方法:1.构建栈储藏满足(递增||递减)关系的元素位置,一般按照题意反向取增减关系2.遍历,当第i个元素符合题意时,将之依次与栈中元素比较,pop元素,并求出元素对应所需值3.依照题意取值leetcode 42 接雨水说明单调栈分析:1.接雨水需要比较容器左右边高2.可以看成是多个容器拼接,容器位原创 2021-02-08 07:20:24 · 867 阅读 · 5 评论 -
获得第k小数-二分法的巧妙应用
寻找第k小数已知:双数组已排序,求所有元素中第k小(大)的数该题解法有多种:1.暴力解法,对所有元素排序,取出第k小数;2.双指针,从各数组首位开始比较,更小的删除,遍历直到删除k-1个元素,则此时指针指的元素中更小值满足条件;3.时间复杂度o(log(m+n)),容易想到二分法,结合双指针做法,即每次删除k//2个元素,以下详细说明#第k小数通用def getkminnumber(n1:List[int],n2:List[int],k): #定义更长数列在前原创 2021-01-30 19:00:26 · 452 阅读 · 0 评论 -
最小生成树算法-prim与kruskal
生成树:即n个顶点构成只有n-1条边的树算法:加边(Kruskal):依照最短路径从最近到最远,构成n/2棵子树,子树最短路径连通,依次循环加点(prim):使用两个集合,一个集合A为最小生成树中的点,另一个B为未加入的点,每次寻找两集合点中最小值,并将对应B中点删除,加入Apy代码:力扣1584...原创 2021-01-20 23:04:18 · 241 阅读 · 4 评论 -
并查集解题
在刷题过程中遇到并查集方法,在此记录:对并查集思路尝试解释:1.创建parent表,初始值为表中parent[x]=x,即默认初始时所有子块分别为单独子块,cnt记录连通子块个数(初始为len)2.find函数:查找根节点,不断向上追溯3.connected函数:使用find判断当前两位置的根节点位置是否相同,如果相同,在union中返回空值跳过后续4.union函数:将根节点不同的子块连通(通过将根节点1在parent中的位置数值由1改为2)连通一次子块个数cnt-1.力扣947:在这里插原创 2021-01-16 00:33:02 · 343 阅读 · 1 评论