目前尚没有很彻底的理解,所以先将大佬的模板和思路拷贝下来,待理解透彻后再上自己的理解。 二分模板一共有两个,分别适用于不同情况。 算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。 版本1当我们将区间[l, r]划分成[l, mid]和[mid ...
分类:
编程语言 时间:
2020-01-27 09:41:19
阅读次数:
85
1 class Solution: 2 def arrayRankTransform(self, arr: List[int]) -> List[int]: 3 n = len(arr) 4 if n == 0: 5 return [] 6 sortlist = sorted(arr) 7 dic ...
分类:
其他好文 时间:
2020-01-26 10:15:40
阅读次数:
97
1 class Solution: 2 def matrixBlockSum(self, mat: 'List[List[int]]', K: int) -> 'List[List[int]]': 3 r,c = len(mat),len(mat[0]) 4 prefixsum = [[0 for ...
分类:
其他好文 时间:
2020-01-12 09:24:06
阅读次数:
65
第24章 单源最短路径 24.1 Bellman Ford算法 24.1 4 思路: 先做|V| 1遍松弛操作,然后再做一遍松弛操作,对于这次松弛操作中dist值被更新的点,必然包含了每个负环中的至少一个点。对于这些点做dfs查找它们能够在图中到达哪些点,所有被搜索到的点即为题目要求找的点 部分c+ ...
分类:
编程语言 时间:
2019-12-31 23:46:27
阅读次数:
171
POJ2352题解(树状数组) 2019-12-29 Powered by Gauss 1.题目传送门:POJ2352 2.题目大意: 这是一道非常经典的树状数组的模板题。 题目大意是说,给出N颗星星,每个星星都有一个二维坐标,要求出位于每颗星星左下方的星星的数量。 3.算法思路: 这道题被给出之后 ...
分类:
编程语言 时间:
2019-12-29 14:59:47
阅读次数:
105
算法思路:BFS。 先记录所有的0值元素的下标,作为初始集合。使用两层遍历,找出每到每个可达点存入下一层的集合。 使用visited进行缓存,过滤重复访问过的点,防止出现环,而死循环。 ...
分类:
其他好文 时间:
2019-12-29 13:02:11
阅读次数:
84
已知空间三点,那么可以就可以确定空间三点组成的平面。此时可以根据某一点的X值和Y值,来求取该点在平面上的Z值。这个过程对于求三角面片上某点的高程或者权值特别有用,其本身也可以看作一种线性插值。 其算法思路也特别简单,首先算出其三点组成的平面法向量(可参看[《已知三点求平面法向量》][netlink1 ...
分类:
其他好文 时间:
2019-12-27 23:54:00
阅读次数:
102
算法思路:滑动窗口。 窗口的范围是[minSize,maxSize]之间,left从左到右遍历,每次得到一个right。 统计left到right这个窗口内的元素,有多少个不同元素,是否满足maxLetters限制。 如果满足条件则存储进res中,最后返回res出现次数最多的值(value)。 ...
分类:
其他好文 时间:
2019-12-22 14:44:07
阅读次数:
68
算法思路:贪心。 先将数组排序,然后按照顺序添加到顺序字典中。 另记录一个key值从小到大的列表。 每次从key列表中选择最小的元素,作为组头,当前组的剩余k-1个元素,依次+1。如果不满足这个条件,则返回False。 如果全部的元素都能分配到对应的组中,就表示符合题意。 ...
分类:
其他好文 时间:
2019-12-22 14:38:45
阅读次数:
112
求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 $O(nlogK)$。借助于分治思想,以及快速排序的区间划分,我们可以做到 $O(n)$ 时间复杂度。具体算法思路如下: 第 1 步,我们将原数据 5 个一组划分为若干个组,最后余下的不足 5 个的额外作为一组,总组数 ...
分类:
其他好文 时间:
2019-12-03 23:45:32
阅读次数:
122