Leetcode
算法
BlackMan_阿伟
不积跬步无以至千里
展开
-
Leetcode of August
class Solution: def triangleNumber(self, nums: List[int]) -> int: n = len(nums) nums.sort() ans = 0 # 固定最大边, a + b > c for i in range(n - 1, 1, -1): l, r = 0, i - 1 # 两数之和问题! ...原创 2021-08-05 10:33:21 · 172 阅读 · 0 评论 -
《Leetcode of July》
1104. 二叉树寻路class Solution: def pathInZigZagTree(self, label: int) -> List[int]: depth = 0 for i in range(1,10000): if label>=2**(i-1) and label<2**(i): depth = i break原创 2021-07-29 15:12:25 · 175 阅读 · 0 评论 -
《Leetcode of July》
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> Li...原创 2021-07-28 11:41:19 · 168 阅读 · 0 评论 -
June——401、二进制手表
class Solution: def readBinaryWatch(self, num: int) -> List[str]: if num>8: return [] res = list() for h in range(12): for m in range(60): #只要分时和秒之和为num即可 if bin(h)..原创 2021-06-21 15:35:56 · 173 阅读 · 0 评论 -
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 · 87 阅读 · 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 · 67 阅读 · 0 评论 -
十大排序算法(python代码实现以及动图原理)
上周面试招行,问了我pa原创 2021-05-31 21:34:27 · 104 阅读 · 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 · 159 阅读 · 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 · 67 阅读 · 0 评论 -
May——剑指 Offer 14- I. 剪绳子I,II
class Solution: def cuttingRope(self, n: int) -> int: #尽可能多的3组成,3越大积越大 if n<3: return 1 if n==3: return 2 res = 1 while n>4: n-=3 res*=3 return res*n ...原创 2021-05-25 10:38:41 · 84 阅读 · 0 评论 -
May——剑指 Offer 16. 数值的整数次方
class Solution: def myPow(self, x: float, n: int) -> float: if n == 0: return 1 elif n < 0: #必须保证n>0 return 1/self.myPow(x, -n) #如果是奇数的话,那么最终的结果:x*x^(n-1) elif n & 1: ...原创 2021-05-24 21:58:59 · 77 阅读 · 0 评论 -
May——692. 前K个高频单词
1、哈希方法先对数组进行计数统计 然后对key进行排序,根据value的负数进行升序排序,然后如果出现次数相同的话,那么对key再进行升序的操作即可 这块的sorted()中待排序的只能是dic.keys()或者dic.values()class Solution: def topKFrequent(self, words: List[str], k: int) -> List[str]: dic = dict() for word in wo...原创 2021-05-20 09:34:03 · 78 阅读 · 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 · 130 阅读 · 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 · 123 阅读 · 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 · 69 阅读 · 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 · 78 阅读 · 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 · 117 阅读 · 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 · 68 阅读 · 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 · 112 阅读 · 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 · 80 阅读 · 0 评论 -
May——1720.解码亦或后的数组
class Solution: def decode(self, encoded: List[int], first: int) -> List[int]: res = [first] for num in encoded: x = first^num res.append(x) first = x return res题目分析考察了异或运算...原创 2021-05-06 15:57:39 · 89 阅读 · 0 评论 -
May——872. 叶子相似的树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def leafSimilar(self, root1: TreeNode, ro...原创 2021-05-06 15:46:59 · 75 阅读 · 0 评论 -
May——690.员工的重要性
"""# Definition for Employee.class Employee: def __init__(self, id: int, importance: int, subordinates: List[int]): self.id = id self.importance = importance self.subordinates = subordinates"""class Solution: def get...原创 2021-05-01 19:45:41 · 67 阅读 · 0 评论 -
April——897.递增顺序搜索树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def increasingBST(self, root: TreeNode) -...原创 2021-04-25 09:49:56 · 86 阅读 · 0 评论 -
April——377.组合综合IV
class Solution: def combinationSum4(self, nums: List[int], target: int) -> int: #dp[i]代表当target为i的时候组合个数 #假如是5 #4的组合数+1 #3的组合数+2 #2的组合数+3 #1的组合数+4 dp = [0]*(target+1) ...原创 2021-04-24 22:21:19 · 153 阅读 · 0 评论 -
April——面试题
题目描述:给定一个数组,都是整数,比如[2,2,3,4],判断数组中的数字能组成多少种三角形?#给定一个数组,判断组成三角形的有多少种组合def help(nums): a,b,c = nums[0],nums[1],nums[2] if a+b>c and a+c>b and c+b>a and a-b<c and a-c<b and c-b<a: return True return Falsedef huisu(i原创 2021-04-23 21:41:57 · 85 阅读 · 0 评论 -
April——76. 最小覆盖子串
class Solution: def minWindow(self, s: str, t: str) -> str: if s==t: return s right = 0 left = 0 start = 0 win_max = float('inf') dic = defaultdict(int) for char in t: ...原创 2021-04-22 19:43:13 · 62 阅读 · 0 评论 -
April——面试题 01.06. 字符串压缩
class Solution: def compressString(self, S: str) -> str: if not S: return S tmp = S[0] count = 1 res = '' for i in range(1,len(S)): if S[i]==tmp: count+=1 ...原创 2021-04-21 10:40:05 · 126 阅读 · 0 评论 -
April——91.解码方法
class Solution: def numDecodings(self, s: str) -> int: size = len(s) # dp = [0]*(size+1) # dp[0] = 1 # #其实就是爬台阶的问题 # #最后一个字符的解码总数f(n)=f(n-1)+f(n-2) # #f(n-2)需要满足条件,十位数不能是0,后面两位必须小于26才可以 ...原创 2021-04-21 10:34:24 · 196 阅读 · 0 评论 -
【图的遍历】BFS+DFS(递归&非递归)
表示图的关系一般使用邻接矩阵或者邻接表,在这里我们用邻接表进行表示图的关系graph={ 'A':['B','C'], 'B':['A','C','D'], 'C':['A','B','D','E'], 'D':['B','C','E','F'], 'E':['C','D'], 'F':['D']}遍历主要是BFS和DFS,DFS这里又分为递归和非递归两种,因为递归的有时候会超出递归的最大深度。 BFS def BFS(graph..原创 2021-04-19 15:33:10 · 710 阅读 · 1 评论 -
April——581.最短无需连续子数组
class Solution: def findUnsortedSubarray(self, nums: List[int]) -> int: if not nums or len(nums)==1: return 0 #排序之后进行比较 sort_nums = sorted(nums) left,right = 0,len(nums)-1 #从左向右比较,如果排序后和未排序的结...原创 2021-04-19 10:20:50 · 68 阅读 · 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 · 86 阅读 · 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 · 92 阅读 · 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 · 94 阅读 · 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 · 63 阅读 · 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 · 125 阅读 · 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 · 95 阅读 · 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 · 65 阅读 · 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 · 248 阅读 · 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 · 154 阅读 · 0 评论