![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 93
分享相关算法题目及算法思想
OS_Net_DCE
专注于操作系统(linux,windows),网络,分布式系统,c++
展开
-
详解布隆过滤器的原理,使用场景和注意事项
原文链接:https://zhuanlan.zhihu.com/p/43263751在进入正文之前,之前看到的有句话我觉得说得很好:Data structures are nothing different. They are like the bookshelves of your application where you can organize your data. Different data structures will give you different facility and ben转载 2021-11-29 17:42:24 · 291 阅读 · 0 评论 -
二分查找题目-转变数组后最接近目标值的数组和
题目给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。class Solution: def findBestValue(self, arr, target): n = len(arr)原创 2020-08-09 20:12:36 · 174 阅读 · 0 评论 -
strStr实现-rabin-karp
class Solution: def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ return self.rabin_karp(haystack, needle) def rabin_karp(self, haystack, needle):原创 2020-08-04 00:20:11 · 83 阅读 · 0 评论 -
字符串匹配-构造DFA
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ return self.search(haystack, needle) def get_dfa(self, pat): M = len(pat)原创 2020-08-03 23:36:19 · 281 阅读 · 0 评论 -
kmp算法实现
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ return self.kmp(haystack, needle) def kmp(self, haystack, needle): """ km原创 2020-07-30 23:21:37 · 103 阅读 · 0 评论 -
leetcode子数组和问题综述
一维数组子数组和类问题出现频率非常多,比如560. 和为K的子数组561. 和可被 K 整除的子数组562. 连续的子数组和1477. 找两个和为目标值且不重叠的子数组这类问题有一个共同点,即均存在求数组A[0, 1,2, … n- 1]内任意子数组的和问题。如果暴力求解,将是O(n^2)。这里可以采用hash数组,将前缀和作为为key.数组下标作为value。利用sum(i + 1, j) = pre_sum(j) - pre_sum(i)的方式去求解。可将复杂度由O(n^2) 将为O(n).原创 2020-07-12 18:50:58 · 185 阅读 · 0 评论 -
位运算-用法汇总
用位运算表示元素组合比如给定数组A = [a0, a1, a2, a3, a4]。为了表示从数组A中选择任意个元素的组合状态。组合总和为2的n次方。可以通过位运算达成。设 bits = 1 << len(A).用bits中的每i位来代表A[i]是否已选。bits的每一个不同的值代表了一种组合。这个在求线性列表的组合数里面非常有用。也可以用bits来表示具体的选择状态。参见leetcode 698. 划分为k个相等的子集 官方题解的动态规划算法。就是用到了bits来表达选择状态。...原创 2020-07-01 02:06:31 · 170 阅读 · 0 评论 -
python3标准算法库
from itertools import combinations原创 2020-06-24 19:24:39 · 340 阅读 · 0 评论 -
哈希应用-523连续的子数组和
题目描述:给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。示例 1:输入:[23,2,4,6,7], k = 6输出:True解释:[2,4] 是一个大小为 2 的子数组,并且和为 6。示例 2:输入:[23,2,6,4,7], k = 6输出:True解释:[23,2,6,4,7]是大小为 5 的子数组,并且和为 42。解答:应用 (i - j) % k原创 2020-06-23 23:12:21 · 119 阅读 · 0 评论 -
滑动窗口-窗口大小不固定
题目:209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。实现:class Solution: def minSubArrayLen(self, s: int, nums: List[int]) -> int: length = len(nums) + 1 cur_sum = 0 left = right原创 2020-06-10 21:02:02 · 630 阅读 · 0 评论 -
回溯基础算法
不重复元素的子集枚举对应leetcode 78题class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ stack = [] ret = [] def compute(stack, seq): ret.app.原创 2020-06-03 19:00:12 · 169 阅读 · 0 评论 -
经典算法之二分查找
寻找旋转排序数组中的最小值 II元素可能重复class Solution: def findMin(self, nums: List[int]) -> int: left = 0 right = len(nums) - 1 while left < right: if nums[left] < nums[right]: return nums[left] .原创 2020-05-21 00:41:44 · 136 阅读 · 0 评论 -
经典算法之-寻找欧拉路径
leetcode题目:332. 重新安排行程题目要求:从JFK出发,遍历所有的边,且边不重复,输出按字母序最小的行程方案。class Solution: def findItinerary(self, tickets: List[List[str]]) -> List[str]: graph = collections.defaultdict(list) for s, t in tickets: graph[s].append(t)原创 2020-05-20 22:23:05 · 764 阅读 · 0 评论 -
经典算法之二叉树中序遍历-栈
以下算法实现验证二叉树是否是二叉搜索树。采用了中序遍历,用栈实现。import sysclass Solution: def isValidBST(self, root: TreeNode) -> bool: stack = [] before = -sys.maxsize while stack or root: while root: stack.append(root)原创 2020-05-16 23:01:26 · 391 阅读 · 0 评论 -
经典算法模板-层次遍历、广度优先搜索
def level_order(root): levels = [] if not root: return [] cur_level = list() cur_level.append(root) while len(cur_level) > 0: cur_eles = [] next_level =...原创 2020-05-05 22:15:12 · 252 阅读 · 0 评论 -
经典算法模板-拓扑排序、深度优先排序
class Solution(object): WHITE = 0 GREY = 1 BLACK = 2 def __init__(self): self.top_order = list() def findOrder(self, numCourses, prerequisites): """ :typ...原创 2020-05-05 21:39:46 · 300 阅读 · 0 评论 -
经典算法模板-并查集实现
class UF: def __init__(self, n): self.count = n self.parent = [i for i in range(n)] def find(self, p): while p != self.parent[p]: self.parent[p] = self.par...原创 2020-05-05 21:24:14 · 139 阅读 · 0 评论 -
leetcode刷题系列-135分发糖果
leetcode刷题系列-贪心算法题目描述题目分析实现题目描述老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你...原创 2020-04-19 23:45:37 · 250 阅读 · 0 评论 -
算法能力等级
算法是一门复杂的学科,不论是算法设计,还是算法实现,或者是算法的正确性证明,算法用例的构造,算法本身的复杂度分析,算法实现的效率,这里面都有很多的技巧。总结下来,可以将算法能力分为下面几个阶段。熟悉常见的算法但不能用简洁的代码快速实现这里面包括排序算法,堆, 栈,并查集, 查找,树,图,字符串等教科书里面的算法掌握算法设计思想包括分治思想,动态规划思想, 贪心思想,深度优先,广度优先思想...原创 2020-04-23 23:35:54 · 1143 阅读 · 0 评论 -
leetcode刷题系列-738单调递增的数字
题目描述给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299初次解法从左到右找到...原创 2020-04-23 23:21:32 · 214 阅读 · 0 评论