- 博客(79)
- 收藏
- 关注
原创 买卖股票的最佳时机(1、2、3)
参考浅谈什么是动态规划以及相关的「股票」算法题重点在于buy和sell各是一个状态,考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高class Solution: def maxProfit(self, prices: List[int]) -> int: #考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高 n = len(prices) buy = -prices[0] sell = 0 .
2021-07-27 13:40:36
197
原创 三角形最小路径和
常规解法:二维dp,空间复杂度O(n^2)class Solution: def minimumTotal(self, triangle: List[List[int]]) -> int: n = len(triangle) dp = [[0]*(i+1) for i in range(n)] dp[0][0] = triangle[0][0] for i in range(1, n): for...
2021-07-25 17:13:12
104
原创 常见的排序算法以及二分法模板
冒泡排序、选择排序、快速排序、归并排序以及二分法模板arr = [7,2,3,1,5,4,6]print(arr)def bubbleSort(arr): n = len(arr) isSort = True for i in range(n-1): for j in range(n-1-i): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], ar
2021-07-17 22:08:08
159
1
原创 二叉树的层序遍历
题目:# self.val = val# self.next = nextclass Solution: def rotateRight(self, head: ListNode, k: int) -> ListNode: ..
2021-06-19 17:23:38
90
原创 LeetCode 581 最短无序连续子数组
解法:代码:需要注意的地方:left和right初始值的设置,left, right = 0, -1 #为了保证如果是一个排好序的数组返回0class Solution: def findUnsortedSubarray(self, nums: List[int]) -> int: n = len(nums) left, right = 0, -1 #为了保证如果是一个排好序的数组返回0 MIN, MAX = n...
2021-05-07 15:54:51
61
原创 LeetCode 406 根据身高重建队列
class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: people = sorted(people, key = lambda x: [-x[0], x[1]]) res = [] for p in people: if len(res) <= p[1]: ...
2021-04-23 11:27:47
76
原创 LeetCode 394 字符串解码
class Solution: def decodeString(self, s: str) -> str: stack, n, res = [], 0, '' for c in s: if c == '[': stack.append((n, res)) n, res = 0, '' elif c == ']': ...
2021-04-22 10:52:29
74
原创 借助LeetCode287 寻找重复数,关于二分算法的一些思考
代码实现:class Solution: def findDuplicate(self, nums: List[int]) -> int: i, j = 1, len(nums)-1 while i < j: #因为j = mid为条件,因此这里i不能等于j,否则会一直循环下去 mid = (i + j) // 2 c = 0 for num in nums: ...
2021-04-15 23:02:52
156
原创 LeetCode 215 数组中的第k大元素
思路:快排或者堆快排:def findKthLargest(self, nums: List[int], k: int) -> int: def partition(nums, left, right): pivot = nums[left] i, j = left, right while i < j: while i < j and nums[j] &g..
2021-04-13 15:42:07
84
原创 LeetCode 78 子集
class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: ''' #回溯1 res = [] n = len(nums) def back_track(index, path): res.append(path) for i in range(index, n): ...
2021-04-12 21:55:04
71
原创 LeetCode 200 岛屿数量
class Solution: def numIslands(self, grid: [[str]]) -> int: def dfs(grid, i, j): if not 0 <= i < len(grid) or not 0 <= j < len(grid[0]) or grid[i][j] == '0': return grid[i][j] = '0' dfs(gr...
2021-04-12 11:04:33
72
原创 二叉树展开为链表
# 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 flatten(self, root: TreeNode) ->...
2021-04-07 10:39:15
84
原创 LeetCode 96 不同的二叉搜索树
思路:动态规划class Solution: def numTrees(self, n: int) -> int: G = [0]*(n+1) G[0], G[1] = 1, 1 for i in range(2, n+1): for j in range(1, i+1): G[i] += G[j-1] * G[i-j] return G[n]...
2021-04-06 10:29:45
69
原创 LeetCode 56 合并区间
关键点:对左区间先进行排序,然后依次将每个区间加入res中使用list.sort()的key以及匿名函数lambdapython3匿名函数:class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: intervals.sort(key = lambda x: x[0]) res = [] for interval in...
2021-03-31 21:39:40
64
原创 LeetCode 49 字母异或词分组
class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: dic = collections.defaultdict(list) for s in strs: tmp = ''.join(sorted(s)) dic[tmp].append(s) return list(dic.values())...
2021-03-30 11:04:08
114
转载 python中的可迭代对象
迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。1.可迭代对象我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语法从其中依次拿到数据进⾏使⽤,我们把这样的过程称为遍历,也叫迭代。但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...每次从中取出⼀条数据供我们使⽤,即供我们迭代吗?&...
2021-03-30 10:20:53
691
原创 LeetCode 543 二叉树的直径
# 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 diameterOfBinaryTree(self, root: Tr...
2021-03-29 20:34:27
79
原创 关于回溯中是否需要拷贝path的复制以及是否需要进行path.pop()操作的两种思路
来自对LeetCode39题,组合总和的一点思考在写回溯的时候,往往需要添加path的一个拷贝,即res.append(path[:]),然后最后回溯的时候再path.pop(),但是如果path + [num],就不用拷贝复制以及pop操作了。class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: #这里有.
2021-03-29 11:37:49
706
原创 LeetCode 39 组合总和
经典回溯题目 + 剪枝 + 避免重复class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: path = [] #当前路径 res = [] #保存结果列表 #回溯函数 def back_track(candidates, target, index): ..
2021-03-29 10:44:55
72
原创 背包问题
# -*- coding: utf-8 -*-"""Created on Wed Mar 24 11:10:08 2021@author: xzq12"""def backpack(n, v ,c, w): # 0-1背包问题: #这里,因为物品只能被选中 1 次,或者被选中 0 次,因此我们称这种背包问题为 01 背包问题。 #有 N 件物品和一个容量为 V 的背包。第 i 件物品的体积是 C[i],价值是 W[i]。 #求解将哪些物品装入背包可使价值总和最大.
2021-03-24 11:26:57
72
原创 快排、归并排序、二分模板
快排:先分在排def quickSort(arr, left, right): if left < right: partitionIndex = partition(arr, left, right) quickSort(arr, left, partitionIndex - 1) quickSort(arr, partitionIndex + 1, right) returndef partition(arr, left, r
2021-03-23 20:45:17
113
原创 Python中如何实现多组的输入输出
n = int(input()) #输入一个整数a, b = map(int, input().split()) #输入两个整数c = list(map(int, input().split())) #输入一个列表d = [list(map(int, input().split()))] $输入一个矩阵多组数据的输入:while True: try: a,b,c=map(int,input().split()) print(a+b+c)..
2021-03-23 10:04:36
7653
原创 剑指Offer 43 1~n整数中1出现的次数
class Solution: def countDigitOne(self, n: int) -> int: digit, res = 1, 0 high, cur, low = n // 10, n % 10, 0 while high or cur: if cur == 0: res += high*digit elif cur == 1: res += high*digit + low...
2021-03-22 10:33:24
54
原创 剑指Offer 41 数据流的中位数
代码阶段:from heapq import *字节调用heapq中的函数就可以from heapq import *class MedianFinder: def __init__(self): """ initialize your data structure here. """ self.A = [] #小顶堆,保存较大的一半 self.B = [] #大顶堆,保存较小的一半...
2021-03-21 16:58:14
57
原创 剑指Offer 26 树的子结构
思路:dfs函数用来判断B中所有节点是否与A中当前节点开始的数相同,然后主函数判断B是不是A的子结构# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isSubStructure..
2021-03-19 20:53:31
70
原创 剑指Offer 16 数值的整数次方
class Solution: def myPow(self, x: float, n: int) -> float: if x == 0: return 0 if n < 0: x, n = 1/x, -n res = 1 while n: if n & 1 == 1: res *= x # n % 2 == 1 x *= x n &...
2021-03-15 14:47:11
87
原创 剑指Offer 68 二叉树的最近公共祖先
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNod...
2021-03-14 16:29:51
135
原创 剑指Offer 59- 二 队列的最大值
思路:使用一个单调递减双向队列class MaxQueue: def __init__(self): from collections import deque self.A, self.B = deque(), deque() def max_value(self) -> int: return self.B[0] if self.A else -1 def push_back(self, value: int)..
2021-03-14 15:20:37
72
原创 剑指Offer 59-1. 滑动窗口的最大值
class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: if not nums or k == 0: return [] deque = collections.deque() # 未形成窗口 for i in range(k): while deque and deque[-1] <...
2021-03-14 14:55:26
56
原创 LeetCode. 141. 环形链表
方法1:哈希表,空间复杂度O(n)方法2:快慢指针,龟兔赛跑# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def hasCycle(self, head: ListNode) -> bool: #时间复杂度O..
2021-03-13 22:54:35
69
原创 面试题 01.09 字符串轮转
class Solution: def isFlipedString(self, s1: str, s2: str) -> bool: if not s1 and not s2: return True if len(s1) != len(s2): return False for i in range(len(s1)): if s1 == s2[i:] + s2[:i]: return True r...
2021-03-13 22:21:53
70
原创 2021-03-13
class Solution: def oneEditAway(self, first: str, second: str) -> bool: if abs(len(first) - len(second)) > 1: return False if len(first) > len(second): first, second = second, first for i in range(len(f...
2021-03-13 21:38:25
66
原创 剑指Offer 66. 构建乘积数组
def constructArr(self, a: List[int]) -> List[int]: n = len(a) res, tmp = [1]*n, 1 for i in range(1, n): res[i] = res[i-1]*a[i-1] for i in range(n-2, -1, -1): tmp *= a[i+1] res[i]...
2021-03-12 17:53:26
77
原创 剑指Offer 58-1 翻转单词顺序
class Solution: def reverseWords(self, s: str) -> str: s = s.strip() i, j = len(s)-1, len(s)-1 res = [] while i >= 0: while i >= 0 and s[i] != ' ': i -= 1 res...
2021-03-11 21:58:34
84
原创 剑指Offer 57- 和为s的连续整数序列
class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: #双指针 i, j, s, res = 1, 2, 3, [] while i < j: if s == target: res.append(list(range(i, j+1))) ...
2021-03-11 21:06:47
74
原创 剑指Offer 56- 数组中数字出现的次数
class Solution: def singleNumbers(self, nums: List[int]) -> List[int]: x, y, z, m = 0, 0, 0, 1 for n in nums: z ^= n while z & m == 0: m <<= 1 for n in nums: if n & m: x^= n ...
2021-03-10 21:46:23
77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人