- 博客(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关注的人