![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数组
BlackMan_阿伟
不积跬步无以至千里
展开
-
June——525.连续数组
class Solution: def findMaxLength(self, nums: List[int]) -> int: prefix_sum = [0] for num in nums: if num==1: prefix_sum.append(num+prefix_sum[-1]) else: prefix_sum.append(pr...原创 2021-06-03 09:12:14 · 80 阅读 · 0 评论 -
June——523.连续的子数组和
class Solution: def checkSubarraySum(self, nums: List[int], k: int) -> bool: #暴力出错 prefix_sum = [nums[0]] for i in range(1,len(nums)): prefix_sum.append(prefix_sum[-1]+nums[i]) for i in range(...原创 2021-06-02 11:19:45 · 61 阅读 · 0 评论 -
May——477.汉明距离总和
class Solution: def totalHammingDistance(self, nums: List[int]) -> int: #暴力超时 # res = 0 # for i in range(len(nums)): # for j in range(i+1,len(nums)): # count = bin(nums[i]^nums[j]).count('1') ...原创 2021-05-29 09:58:56 · 148 阅读 · 0 评论 -
May——409. 最长回文串
class Solution: def longestPalindrome(self, s: str) -> int: dic = defaultdict(int) for char in s: dic[char]+=1 res = 0 tmp = 0 for k,v in dic.items(): if v%2==0: ...原创 2021-05-26 20:15:17 · 60 阅读 · 0 评论 -
May——1277. 统计全为 1 的正方形子矩阵
class Solution: def countSquares(self, matrix: List[List[int]]) -> int: res = 0 row = len(matrix) col = len(matrix[0]) dp = [[0]*col for _ in range(row)] for i in range(0,row): for j i...原创 2021-05-14 10:23:57 · 104 阅读 · 0 评论 -
May——12.罗马数字
罗马数字转整数class Solution: def romanToInt(self, s: str) -> int: dic = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} res = 0 if len(s)==1: return dic[s[0]] for i in range(len(s)):原创 2021-05-14 09:49:48 · 112 阅读 · 0 评论 -
May——1269.停在原地的方案数
class Solution: def numWays(self, steps: int, arrLen: int) -> int: mod = 10**9 + 7 maxColumn = min(arrLen - 1, steps) #避免走太远回不来 dp = [[0] * (maxColumn + 1) for _ in range(steps + 1)] dp[0][0] = 1 #动...原创 2021-05-13 09:56:21 · 67 阅读 · 0 评论 -
May——子数组亦或查询
class Solution: def xorQueries(self, arr: List[int], queries: List[List[int]]) -> List[int]: res = [] all_xor = 0 #前缀和 for i in range(len(arr)): all_xor^=arr[i] arr[i] = all_xor ...原创 2021-05-12 09:45:13 · 74 阅读 · 0 评论 -
May——1734. 解码异或后的排列
class Solution: def decode(self, encoded: List[int]) -> List[int]: #想尝试用回溯法,遍历出所有的排列组合 #遍历得到所有的排列组合之后再判断 #暴力超时 # size = len(encoded)+1 # def huisu(index,path,res,visited): # if len(path)==size:...原创 2021-05-11 10:55:13 · 86 阅读 · 0 评论 -
May——1482. 制作 m 束花所需的最少天数
class Solution: def minDays(self, bloomDay: List[int], m: int, k: int) -> int: if len(bloomDay)<m*k: return -1 #先对日期去重、在排序 day = sorted(list(set(bloomDay))) print(day) #遍历去重...原创 2021-05-09 22:55:45 · 63 阅读 · 0 评论 -
May——873. 最长的斐波那契子序列的长度
class Solution: def lenLongestFibSubseq(self, A: List[int]) -> int: if len(A)<3: return 0 #暴力超时 size = len(A) max_size = 0 s = set(A) for i in range(size): for j in range(...原创 2021-05-08 09:53:09 · 85 阅读 · 0 评论 -
May——554.砖墙
class Solution: def leastBricks(self, wall: List[List[int]]) -> int: if not wall: return 0 nums = [] #先计算缝隙的位置 for line in wall: tmp = [] temp = 0 for i in range...原创 2021-05-06 16:36:48 · 56 阅读 · 0 评论 -
April——154.寻找旋转数组中的最小值
class Solution: def findMin(self, nums: List[int]) -> int: left, right = 0, len(nums) - 1 while left < right: mid = (left + right) // 2 if nums[mid] > nums[right]: l...原创 2021-04-09 14:44:32 · 79 阅读 · 0 评论 -
April——153. 寻找旋转排序数组中的最小值
class Solution: def findMin(self, nums: List[int]) -> int: if not nums: return 0 if len(nums)==1: return nums[0] l,r = 0,len(nums)-1 while l<r: mid = (l+r)//2 ...原创 2021-04-07 11:18:34 · 86 阅读 · 2 评论 -
April——33.搜索旋转排序数组
class Solution: def search(self, nums: List[int], target: int) -> int: if not nums: return -1 l,r = 0,len(nums)-1 while l<=r: mid = (l+r)//2 #如果恰好找到直接返回 if nu...原创 2021-04-07 10:21:59 · 85 阅读 · 2 评论 -
April——27.移除元素
class Solution: def removeElement(self, nums: List[int], val: int) -> int: #从前往后删 # for i in range(len(nums)-1,-1,-1): # if nums[i]==val: # nums.pop(i) # return len(nums) ...原创 2021-04-06 15:23:15 · 58 阅读 · 0 评论 -
Apirl——26.删除有序数组中的重复元素
class Solution: def removeDuplicates(self, nums: List[int]) -> int: if len(nums)==1: return 1 #从后往前删除,核心在len(nums)-1这个地方 for item in range(len(nums)-1,0,-1): if nums[item]==nums[item-1]: ...原创 2021-04-06 14:56:48 · 111 阅读 · 0 评论 -
April——88.合并两个有序数组
class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ #nums1[:] = sorted(nums1[:m] + nums2) ...原创 2021-04-06 11:06:06 · 89 阅读 · 0 评论 -
April——781.森林中的兔子
class Solution: def numRabbits(self, answers: List[int]) -> int: if not answers: return 0 #先统计每个兔子告诉你还有多少其他的兔子和自己有相同的颜色 #然后找规律,计算 #向上取整ceil(x/y+1)==(x+y)//(y+1) count = Counter(answers) ...原创 2021-04-06 10:14:28 · 61 阅读 · 0 评论 -
March——解完全平方数
给定整数,找到若干个完全平方数(比如1,4,9,16,...)使得它们的和等于n。你需要让组成和的完全平方数的个数最小。给你一个整数n,返回和为n的完全平方数的最小数量。输入:12输出:3解释:4+4+4---------------------------------------------------输入:13输出:2解释:4+9动态规划 最小数量,最大数量这种问题其实都可以考虑使用动态规划来做,类似于背包问题 dp[i]表示的是当n等于i的时候完全平方数的最少数量.原创 2021-03-30 12:28:59 · 220 阅读 · 0 评论 -
March——7.整数反转
class Solution: def reverse(self, x: int) -> int: #取整的原因是因为 由于Python的 // 操作是向下取整,导致正负数取余 % 操作结果不一致,因此需要将原数字转为正数操作。 #将每一位进行拆分,然后再进行组合 y, res = abs(x), 0 boundry = (1<<31) -1 if x>0 else 1<<31 ...原创 2021-03-29 23:29:11 · 144 阅读 · 0 评论 -
March——73.矩阵置零
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ #空间复杂度1 if not matrix or not matrix[0]: return M,...原创 2021-03-22 16:31:57 · 126 阅读 · 0 评论 -
March——706.设计hash映射
class MyHashMap: def __init__(self): """ Initialize your data structure here. """ #self.hashmap = dict() #self.hashmap = [-1]*1000001 self.map = [[-1] * 1000 for _ in range(1001)] def put(self...原创 2021-03-15 21:51:47 · 81 阅读 · 0 评论 -
March——150.逆波兰表达式求值
class Solution: def evalRPN(self, tokens: List[str]) -> int: f1 = lambda x,y:x+y f2 = lambda x,y:x-y f3 = lambda x,y:x*y f4 = lambda x,y:int(x/y) dic = {'+':f1,'-':f2,'*':f3,'/':f4} stack = [] ...原创 2021-03-11 21:41:31 · 101 阅读 · 0 评论 -
March——224.基本计算器I,II
class Solution: def calculate(self, s: str) -> int: # 初始化sign为 “+”,是因为开头是数字 num ,stack ,sign = 0 , [] , '+' for i in range(len(s)): ch = s[i] if ch.isdigit(): num = num * 10 + int(c...原创 2021-03-11 21:28:03 · 148 阅读 · 0 评论 -
March——322.零钱兑换I,II(背包问题)
class Solution: def coinChange(self, coins: List[int], amount: int) -> int: #dp[i]表示金额为i需要最少的硬币 #自顶向下 #dp[i] = min[dp[i-coin1],dp[i-coin2],dp[i-coin3]]+1 #在functools这个模块中,有lru_cache这个一个神奇的装饰器存在。 #functoo...原创 2021-03-09 11:13:08 · 107 阅读 · 0 评论 -
March——1047.删除字符串中的所有相邻重复项
class Solution: def removeDuplicates(self, S: str) -> str: if not S: return '' stack = [] for i in range(len(S)): if stack and stack[-1]==S[i]: stack.pop() else: ...原创 2021-03-09 10:00:29 · 74 阅读 · 0 评论 -
March——131.分割回文串(回溯算法)
class Solution: def partition(self, s: str) -> List[List[str]]: if len(s)==0: return [[]] if len(s)==1: return [[s]] isPalindrome = lambda s : s == s[::-1] def backtrac...原创 2021-03-08 22:12:20 · 120 阅读 · 0 评论 -
March——496.下一个更大元素I,II(单调栈)
class Solution: def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]: #暴力解法 res = [] for i in range(len(nums1)): index = nums2.index(nums1[i]) flag = False w...原创 2021-03-06 13:28:37 · 98 阅读 · 0 评论 -
March——354. 俄罗斯套娃信封问题
class Solution: def maxEnvelopes(self, envelopes: List[List[int]]) -> int: # dp = [1]*len(envelopes) # if not envelopes: # return 0 #超出时间限制 # envelopes = sorted(envelopes,key = lambda x:x[0]) ...原创 2021-03-04 17:29:02 · 105 阅读 · 1 评论 -
March——896.单调数列
class Solution: def isMonotonic(self, A: List[int]) -> bool: #先判断第一个和最后一个元素的大小,假设该数列是递增或者递减,然后遍历过程中进行验证就可以了 if A[0]<=A[-1]: for i in range(1,len(A)): if A[i]>=A[i-1]: ...原创 2021-03-02 10:16:37 · 69 阅读 · 0 评论 -
March——303. 区域和检索 - 数组不可变(304)
一维矩阵前缀和class NumArray: def __init__(self, nums: List[int]): if not nums: return self.nums = nums self.dp = [0]*(len(nums)+1) #前缀和 for i in range(0,len(nums)): self.dp[i+...原创 2021-03-01 11:43:52 · 96 阅读 · 0 评论 -
Feburary——1052.爱生气的书店老板
class Solution: def maxSatisfied(self, customers: List[int], grumpy: List[int], X: int) -> int: size = len(customers) Sum_pre = 0 #不生气的状态下有多少顾客 for i in range(len(grumpy)): if grumpy[i]==0: ...原创 2021-02-23 11:01:21 · 202 阅读 · 0 评论 -
Feburary——1438. 绝对差不超过限制的最长连续子数组(滑动窗口)
class Solution: def longestSubarray(self, nums: List[int], limit: int) -> int: #利用第三方库,将列表有序化,底层其实是一个最小堆 from sortedcontainers import SortedList left, right = 0, 0 size = len(nums) s = SortedLi...原创 2021-02-22 16:55:17 · 510 阅读 · 0 评论 -
Feburary——766.托普利茨矩阵
又是新的一周,加油板砖,加油刷题。class Solution: def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool: if not matrix: return True if len(matrix)==1: return True #将行和列的元素都拿到 row = matrix[0] .原创 2021-02-22 10:28:48 · 147 阅读 · 0 评论 -
February——566.重塑矩阵
class Solution: def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]: row,col = len(nums),len(nums[0]) #如果行*列大于计算出来的行*列的值,那就直接返回当前nums if r*c>row*col: return nums ...原创 2021-02-20 16:15:29 · 74 阅读 · 0 评论 -
February——215.数组中的第k个最大元素&最小堆
class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: #直接排序,然后找到第k个最大的元素 nums_res = sorted(nums,reverse=True) return nums_res[k-1] #构建一个大小为k的最小堆,堆顶元素就是第k个最大的元素 heap = nums h...原创 2021-02-18 10:55:49 · 176 阅读 · 0 评论 -
February——703. 数据流中的第 K 大元素&堆的总结以及API的使用
聊今天这个题目之前先聊聊一个数据结构:堆。堆又分为最大堆和最小堆。父节点的值总是大于或者等于任何一个子节点的值时为最大堆。父节点的值总是小于或者等用户任何一个子节点的值时为最小堆。其实说白了就是一个完全二叉树的数据结构。如下图所示,左边是最大堆,右边是最小堆。最大堆和最小堆的应用和优先队列差不多,每次都能弹出一个最大值或者最小值,当然在python中也有相应API。接下来堆API的方法大致说明一下:#导入堆import heapq#将list转化堆heapq.heapify(x)...原创 2021-02-18 10:46:31 · 116 阅读 · 0 评论 -
February——567.字符串的排列
class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: if not s1 and not s2: return True if not s1 or not s2: return False #计算s1和s2的长度 l1,l2 = len(s1),len(s2)...原创 2021-02-10 14:14:21 · 131 阅读 · 1 评论 -
February——978. 最长湍流子数组
class Solution: def maxTurbulenceSize(self, arr: List[int]) -> int: #动态规划 #以arr[i]结尾,且arr[i]>arr[i-1] increase=[0]*len(arr) #以arr[i]结尾,且arr[i]<arr[i-1] decrease=[0]*len(arr) #初始化的长度都...原创 2021-02-09 10:12:55 · 110 阅读 · 0 评论