自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 LeetCode 410 分割数组的最大值

采用二分搜索的方法import sysclass Solution: def splitArray(self, nums: List[int], m: int) -> int: lo,hi=-sys.maxsize,0 for val in nums: hi+=val lo=max(lo,val) res=hi while lo<=hi: mi

2020-07-27 14:53:44 77

原创 LeetCode 128 最长连续序列

线性时间复杂度的算法。利用集合,每次找到每个区间的最小点,然后摸清该序列长度。from typing import *class Solution: def removeCoveredIntervals(self, intervals: List[List[int]]) -> int: intervals.sort(key=lambda x:(x[0],-x[1])) cnt=1 i=1 bound=intervals

2020-07-14 14:50:49 104

原创 LeetCode 315 计算右侧小于当前元素的个数

使用树状数组实现。树状数组可以用于数组上需要更新的求和问题。from typing import *class TreeArr(): def __init__(self,n): self.n=n #原数组的长度 self.c=[0]*(n+5) def lowbit(self,x): #x不可以为0 return x & (-x) def update(self,i,k): while i<=s

2020-07-11 08:20:22 118

原创 LeetCode 1504 统计全1子矩阵

时间复杂度O(m2n)根据每个1作为右下角计数import sysclass Solution: def numSubmat(self, mat: List[List[int]]) -> int: if len(mat)==0 or len(mat[0])==0: return 0 m,n=len(mat),len(mat[0]) dp=[[0]*n for _ in range(m)] res

2020-07-08 14:44:45 195

原创 LeetCode 726 原子的数量

种种类型题目利用栈实现很方便。第一次实现的时候超时了,原因在于利用一个带有重复元素的列表来保存当前遇到的原子。这样的话列表可能非常大,效率极低。利用字典解决了这个问题。from collections import defaultdictclass Solution: def countOfAtoms(self, formula: str) -> str: i = 0 len1 = len(formula) tem_dic = d

2020-07-06 14:57:17 136

原创 LeetCode 44 通配符匹配

class Solution: def __init__(self): self.dp= {} def isMatch(self, s: str, p: str) -> bool: return self.helper(s,p,0,0) def helper(self,s,p,i,j): if (i,j) in self.dp: return self.dp[i,j] if j==len.

2020-07-05 08:10:23 63

原创 LeetCode 32 最长有效括号

看是很简单的题目,其实挺不好写利用栈解决class Solution: def longestValidParentheses(self, s: str) -> int: stack=[] max_len=0 stack.append((-1,')'))#添加一个哨兵元素,保证栈不为空 for i,c in enumerate(s): if c=='(': stac

2020-07-04 15:13:43 59

原创 LeetCode 1498 满足条件的子序列数目

给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。首先将数组排序,因为该题处理子序列过程只是计数,和顺序无关。class Solution: def numSubseq(self, nums: List[int], target: int) -> int: mod=int(10**9+

2020-07-03 18:03:01 145

原创 布尔运算

给定一个布尔表达式和期待的结果,找到得到对应结果的可能个数。class Solution: def countEval(self, s: str, result: int) -> int: if len(s)==0: return 0 n=len(s) dp=[[[-1,-1] for _ in range(n)] for _ in range(n)] return self.rec(s,dp,0

2020-07-02 17:53:06 278

原创 LeetCode 546 移除盒子

三重动态规划from typing import *from collections import defaultdictclass Solution: def __init__(self): self.dic=defaultdict(int) def removeBoxes(self, boxes: List[int]) -> int: return self.helper(boxes,0,len(boxes)-1,0) def h

2020-07-02 17:23:59 89

原创 leetCode 719 找出第k小的距离对

最小的可能值为0,最大可能为最大值减去最小值,二分搜索。from typing import *class Solution: def smallestDistancePair(self, nums: List[int], k: int) -> int: nums.sort() lo,hi=0,nums[-1]-nums[0] while lo<=hi: mid=lo+(hi-lo)//2

2020-07-02 09:46:07 89

原创 LeetCode 378 有序矩阵中的第K小的元素

在最大值和最小值之间搜索class Solution: def check(self,matrix,val): m,n=len(matrix),len(matrix[0]) i,j=m-1,0 cnt=0 while i>=0 and j<n: if matrix[i][j]<=val: cnt+=(i+1) j+=1

2020-07-02 08:30:21 64

原创 LeetCode 718 最长重复子数组

子数组问题都可以采用这种哈希的办法解决。将子串映射到对应的数值上,可以方便比较是否相等。from typing import *class Solution: def findLength(self, A: List[int], B: List[int]) -> int: res=0 lo,hi=0,min(len(A),len(B)) while lo<=hi: mid=(lo+hi)//2

2020-07-01 15:37:07 58

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除