展开

关键词

python】LRU

LRU是Least Recently Used缩写,即最近最少使用,是一种常用页面置换算法,选择最近最久未使用页面予以淘汰。 该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大,即最近最少使用页面予以淘汰。 ,队列就变为,下次再添加一个新元素时候就是优先将(c,3)移除了;我们要保证删除和插入时间复杂度为O(1),因此要使用字典,而且字典中元素要是有序,因此使用python自带OrderedDict OrdereDict有个特殊方法popitem(Last=False)时则实现队列,弹出最先插入元素 而当Last=True则实现堆栈方法,弹出是最近插入那个元素。 return if self.cap == self.cache.size: self.removeLeastRecently() self.addRecently(key, val)这种实现还有点问

13430

python在leecode-第一

>>> a=>>> b=enumerate(a)>>> b >>> list(b)>>>2、思想是在里取出来第一个值,放在hashmap里,用target9减去第二个值,如果在hashmap里这个差值存在说明满足 2+7=9,然后把这个hashmap里key-value输出来。? str(x)>>> b321->>> x-123>>> x=-x>>> x123>>> str(x)123>>> b=str(x)>>> b123>>> b321>>>  2、两个循环,第一个是求出所有数倒序 ,第二个循环是满足条件范围以后 输出值,不在范围return 0总结:MLGB,传说中leecode有点东西啊,谁知道这东西能找到工作不,但是我想知道他是啥机制能判断出来我上传代码对还是不对啊

18720
  • 广告
    关闭

    腾讯云前端性能优化大赛

    首屏耗时优化比拼,赢千元大奖

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python】二叉树

    构造class TreeNode: def __init__(self,val,left=None,right=None): self.val=val self.left=left self.right t5 = TreeNode(5)t4 = TreeNode(4)t3 = TreeNode(3,t6,t7)t2 = TreeNode(2,t4,t5)t1 = TreeNode(1,t2,t3)二叉树遍历递归 ): if not root: return stack1 = stack2 = ] res = while queue: tmp = 中序遍历: 后序遍历: 层次遍历: , , ]二叉树序列化递归 return res res = pre_non_recursive_order(root) return resres = serialize(t1)print(序列化:,res)结果: 序列化: 二叉树反序列化递归 root.left = deserialize(arr) root.right = deserialize(arr) return root结果: 反序列化-层次遍历: , , ]递归-后序遍历实战652 寻找重复子树未完待续

    9320

    python】前缀和

    求连续子数组和def subarraySum(nums): preSum = for i in range(len(nums)): preSum = preSum + nums return preSum nums = res = subarraySum(nums)print(res)接下来我们要求连续子数组和只需要利用:preSum-preSumleetcode 560 和为K子数组class Solution for j in range(i): if preSum - preSum == k: res += 1 return res 优化:我直接记录下有几个sum和sum-k相等,直接更新结果,就避免了内层 我们可以用哈希表,在记录前缀和同时记录该前缀和出现次数。

    18710

    python】分治法

    10310

    python】单调栈

    模板:找到每个元素后面第一个比它大数,不存在时值为-1def template(): stack = res = for i in range(len(nums)-1,-1,-1): while 下一个更大元素 II方法一:套用模板,额外是对于最后一个元素,我们要将数组长度翻倍class Solution: def nextGreaterElements(self, nums: List) - () res = stack if stack else -1 stack.append(nums) print(res) return res 方法二:利用循环数组技巧以下代码让我们可以循环打印数组

    12320

    python】并查集

    这里借用百度百科一句话:并查集是一种树型数据结构,用于处理一些不相交集合(disjoint sets)合并及查询问。常常在使用中以森林来表示。 = rootQ self.size += self.size self.co -= 1 # 用于判断p和q之间是否连通,如果两个节点父节点是相同,那么就是连通 def connected(self 每个群size,也就是包含节点数目就是1,self.size=1。 :, unionF.size)结果:初始化每个节点父节点: 初始化群个数: 10 判断3与8之间是否在一个群里面:False 返回节点7父节点3 当前每个节点父节点: 当前群个数: 6 当前每一个群节点个数 : 更具体介绍可以去参考labuladong算法小抄。

    12520

    Python 笔记:随缘

    今天时间不太多,记一道遇到面试目给定一个 m x n 字符矩阵和字符串 s,在矩阵中每次只能横向、纵向移动一步,不能超出矩阵范围,问:是否可以由矩阵中拼接出 s?? 目分析对深度优先搜索掌握并不到位,所以第一时间没有形成思路。直到后来确定是应用该算法后,才刚刚把答案完成。大致思路:用嵌套列表来表示矩阵,首先遍历矩阵中点,找到可以匹配字符串起点点。 将这个过程定义成独立函数,在每次匹配到起点后调用,若全部起点都不能达到目标,最终返回 False。 代码实现 # 由矩阵中点向上下左右移动检索函数def search(tup,matrix,s): # 如果字符串为空,单独处理 if not s: return (-2,-2) # 要匹配字符 c

    17520

    Python 笔记:背包问

    动态规划第二天,有些自闭,刚靠着大魔王歌缓过来了。关于动态规划,我还处于看解时哦哦哦、看目时???阶段,所以整理点不深。 除了昨天推给大家链接,今天也是发现了一位大牛宝藏,不仅动态规划,各类算法都做了整理、引导,属实 respect ! 具体讲解我等之后理解加深有机会再展开,阶段效率为主,今天记录经典背包目。目「0-1背包问描述」现在有一个可装载重量为 W 背包和 N 个物品,每个物品有重量和价值两个属性。 动态规划英文 dynamic programming,所以定义相关状态数组多用 dp, 本目中就是通过定义二维数组、在 Python 中即嵌套列表来实现。 背包问中,用 dp 表示在物品列表中前 i 件物品操作完、此时背包容量为 j 状态下,背包所能装最大价值,恰好对应了目所求,求容量为 W 背包、 N 个物品所实现最大价值即 dp 对应

    30520

    Python入门必

    最近一直在自学python,刚学习完基础知识,但一看到目,就两眼一抹黑,实在是怀疑自己有没有学过python。向一些python大神请教,给建议都是要多接触项目,在项目中学习。 下面我就把自己在leetcode上做一些简单但又不错目分享给大家,希望入门小伙伴们一下,大神自动忽略哈。​?1.能被3或5整除1000以内数字和。 =6, nums))>>> print(sorted(newnums,reverse=True))该方法中用到了python内置函数filter(),它主要用于过滤序列,过滤掉不符合条件元素,返回一个迭代器对象 nums)) for k,v in Counter(nums).items(): if v > 2: nums.remove(k) print(nums)question4(nums=)上述方法用到了python 我也是一个python小白,自己才疏学浅,很多地方不懂,如果有写不到位地方,欢迎小伙伴们拍砖。

    23830

    python】差分数组

    前缀和主要适用场景是原始数组不会被修改情况下,频繁查询某个区间累加和。 差分数组主要适用场景是频繁对原始数组某个区间元素进行增减。 nums for i in range(1,len(nums)): diff = nums - nums return diff # 给闭区间增加val # 原理很简单,回想diff数组反推nums数组过程 ,diff += 3意味着给nums所有元素都加了 3,然后diff -= 3又意味着对于nums所有元素再减 3,那综合起来,是不是就是对nums中所有元素都加 3 了? difference.increment(2,3,1)print(difference.diff)rdiff = difference.recover()print(rdiff)结果: 不妨去试试力扣第 1109 「 labuladong算法小抄

    17310

    python】二分查找

    = target: return -1 return right - 1 nums = res = binarySearch(nums, -2)print(res)当数组中存在重复元素时候,我们要返回左右边界时候 包裹运输问? i == len(w): return True maxCap = maxCap - w return False该代码还有点问,没有通过leetcode上全部用例,掌握思想就好。 最后,首先思考使用 for 循环暴力解决问,观察代码是否如下形式:for i in range(n): if isOK(i): return answer如果是,那么就可以使用二分搜索优化搜索空间:如果要求最小值就是搜索左侧边界二分 labuladong算法小抄

    18210

    python】单调队列

    239 滑动窗口最大值class Solution: def maxSlidingWindow(self, nums: List, k: int) -> List: from collections 下面是修改后代码:from collections import deque class Solution: def maxSlidingWindow(self, nums: List, k: int ) -> List: queue = deque() res = : queue.popleft() # 如果当前值比queue里面最后值要大,则删除queue最后值 while queue and nums >= nums]: queue.pop() queue.append(i) if i >= k-1: # queue中首位保证是最大值 res.append(nums]) return res

    14020

    python】二维数组旋转

    matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]

    14520

    python】二叉树-相关

    计算二叉树有多少个节点def count(root): if not root: return 0 return 1 + count(root.left) + count(root.right) 计算二叉树深度

    15510

    python】滑动窗口法

    import Counter needs = Counter(t) windows = {i:0 for i in t} left, right = 0, 0 valid = 0 # 记录最小覆盖子串起始位置以及长度

    15630

    python】栈实现队列

    结果: s1: [1, 2, 3] s2: [] 1 s1: [] s2: [3, 2, 1] s1: [] s2: [3, 2] s1: [4...

    11620

    400多人一道Python

    最近写文章会偏向于Python实战一些,大家不要看着,心里就有抵触了,其实一直是学习一个必要途径。你想想高中时候,如果你光听听课,学学理论就行话,那不是每个人都成状元啦。 我每天分享Python目,都是花时间从leetcode上找,自己先做一遍,把思路理清了才敢分享出来,每道都是掰开揉碎细讲,不仅适合入门同学,对于一些应聘找工作小伙伴也有参考价值。 一起来看一下今天目吧!给定一个字符串,寻找没有字符串重复最长子字符串。 ,所以,对于新手来说,不管是还是看学习视频,切莫贪多,老老实实地把每道弄懂才是最重要。 很多学习Python人都抱怨说Python虽然功能强大,但是内置函数太多,我记不住,但是,你要是像我这样每次写代码时,把用到函数都总结一遍,时间久了,我相信肯定对大多数函数也会熟能生巧

    19560

    python】数据流中中位数

    数据流中位数思路:维护一个大顶堆和一个小顶堆;import heapqclass MedianFinder(object): def __init__(self): initialize your

    11320

    Python 笔记:位运算专

    Python 初接触 &、| 等运算符时,只大概了解它们被称为位运算符,并不同于逻辑运算符 and、or,今天就通过基础知识点和几道目来熟悉下。 关键点来了,我们接下来要接触「位运算符,都是对数字补码进行运算」!这就是我们自己测试时,正数间位运算看着都挺正常,但一涉及到负数就老不按预想走。接下来我们看常用运算符:?我们运行下示例:? 示例位运算结果结合着之前 4 和 -5 补码,就很容易理解 ~ 4 值为何是 -5 了。当然,这只是最基础位运算,当具体到特定情景时,位运算有很多妙用,我们就在目中去体会学习吧! 目第 371 :两整数之和难度:简单不使用运算符 + 和 - ,计算两整数 a 、b 之和。 示例 1:输入: a = 1, b = 2输出: 3 示例 2:输入: a = -2, b = 3输出: 1位运算技巧这里解释说明我直接选用精选解,还是容易理解解来源:https:leetcode-cn.comproblemssum-of-two-integerssolutionwei-yun-suan-xiang-jie-yi-ji-zai-python-zhong-xu-y

    17520

    扫码关注云+社区

    领取腾讯云代金券