自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 172

原创 三角形最小路径和

常规解法:二维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 85

原创 常见的排序算法以及二分法模板

冒泡排序、选择排序、快速排序、归并排序以及二分法模板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 132 1

原创 二叉树的层序遍历

题目![在这里插入图片描述](https://img-blog.csdnimg.cn/20210710235529582.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQwNDY5ODgz,size_16,color_FFF# Definition for a binary tree node.# class TreeNode:

2021-07-10 23:57:24 146 2

原创 记录~~~~~~~~

2021.07.06:one:two:three:MD:one = 不用复习two = 已做未复习three = 已复习

2021-07-06 20:28:20 66

原创 git常用命令

git clone 从git仓库克隆代码git add . + git commit -m “你的注释” = git commit -am “你的注释”git pullgit pull --rebase origin mastergit pushgit push origin HEAD:yourbranchnamegit branch 查看分支git status 查看状态git branch your_branchname 创建新的分支git checkout branchname 进入

2021-06-20 11:06:53 54

原创 Leetcode 61 旋转链表

思路:先连成环再截断代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def rotateRight(self, head: ListNode, k: int) -> ListNode: ..

2021-06-19 17:23:38 67

原创 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 43

原创 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 60

原创 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 56

原创 借助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 128

原创 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 62

原创 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 57

原创 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 51

原创 二叉树展开为链表

# 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 64

原创 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 50

原创 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 48

原创 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 87

转载 python中的可迭代对象

迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。1.可迭代对象我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语法从其中依次拿到数据进⾏使⽤,我们把这样的过程称为遍历,也叫迭代。但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...每次从中取出⼀条数据供我们使⽤,即供我们迭代吗?&...

2021-03-30 10:20:53 656

原创 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 56

原创 关于回溯中是否需要拷贝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 646

原创 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 57

原创 Python常见问题汇总

如果按照:取列表中的数,虽然只取一个数,但结果仍为列表;如果索引值不对,则输出空集。

2021-03-26 22:37:58 177

原创 背包问题

# -*- 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 55

原创 快排、归并排序、二分模板

快排:先分在排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 97

原创 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 7189

原创 剑指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 37

原创 剑指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 43

原创 剑指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 53

原创 剑指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 65

原创 剑指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 102

原创 剑指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 56

原创 剑指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 42

原创 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 53

原创 面试题 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 54

原创 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 51

原创 剑指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 62

原创 剑指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 66

原创 剑指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 58

原创 剑指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 55

空空如也

空空如也

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

TA关注的人

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