LeetCode
一杯小熊
这个作者很懒,什么都没留下…
展开
-
买卖股票的最佳时机(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 · 139 阅读 · 0 评论 -
二叉树的层序遍历
题目![在这里插入图片描述](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 · 103 阅读 · 2 评论 -
记录~~~~~~~~
2021.07.06:one:two:three:MD:one = 不用复习two = 已做未复习three = 已复习原创 2021-07-06 20:28:20 · 58 阅读 · 0 评论 -
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 · 62 阅读 · 0 评论 -
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 · 38 阅读 · 0 评论 -
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 · 50 阅读 · 0 评论 -
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 · 51 阅读 · 0 评论 -
借助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 · 102 阅读 · 0 评论 -
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 · 55 阅读 · 0 评论 -
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 · 51 阅读 · 0 评论 -
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 · 46 阅读 · 0 评论 -
二叉树展开为链表
# 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 · 58 阅读 · 0 评论 -
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 · 47 阅读 · 0 评论 -
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 · 45 阅读 · 0 评论 -
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 · 53 阅读 · 0 评论 -
关于回溯中是否需要拷贝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 · 606 阅读 · 0 评论 -
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 · 52 阅读 · 0 评论 -
背包问题
# -*- 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 · 50 阅读 · 0 评论 -
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 · 48 阅读 · 0 评论 -
剑指Offer 53 在排序树组中统计数字出现次数
class Solution: def search(self, nums: List[int], target: int) -> int: def helper(nums, target): i, j = 0, len(nums)-1 while i <= j: mid = (i + j) // 2 if target >= nums[mid]...原创 2021-03-09 11:23:51 · 58 阅读 · 0 评论 -
Leetcode.No.153/154 寻找螺旋排序树组中的最小值
注意:数组中无重复二分法关键:1. while循环条件为left < right 而不是left <= right2. 右边界收缩条件为mid = right 而不是mid = right - 1class Solution: def findMin(self, nums: List[int]) -> int: left, right = 0, len(nums)-1 while left < right: ..原创 2021-02-28 13:54:15 · 51 阅读 · 0 评论 -
剑指Offer 24 反转链表
迭代的思想就是利用pre和cur两个指针,然后逐步向后遍历# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reverseList(self, head: ListNode) -> ListNode: #递归 ..原创 2021-02-27 10:56:46 · 150 阅读 · 0 评论 -
剑指Offer 21. 调整数组顺序使奇数位于偶数前面
class Solution: def exchange(self, nums: List[int]) -> List[int]: left, right = 0, len(nums)-1 while left < right: while left < right and nums[left] % 2 == 1: left += 1 while left <...原创 2021-02-25 22:49:07 · 59 阅读 · 0 评论 -
剑指Offer 15 二进制中1的个数
class Solution: def hammingWeight(self, n: int) -> int: count = 0 while n: count += n & 1 n >>= 1 return count ''' return str(bin(n)).count('1') '''原创 2021-02-25 11:12:58 · 45 阅读 · 0 评论 -
剑指Offer 12 矩阵中的路径
将矩阵看作无向图,因此用深度优先或者广度优先class Solution: def exist(self, board: List[List[str]], word: str) -> bool: m, n = len(board), len(board[0]) def dfs(i, j , k): if not 0 <= i < m or not 0 <= j < n or board[i][j] !=...原创 2021-02-25 10:48:32 · 48 阅读 · 0 评论 -
剑指Offer 10-二 青蛙跳台阶问题
典型的动态规划步骤:一、问题拆解二、状态定义三、递推方程四、代码实现(注意初始化和边界条件)class Solution: def numWays(self, n: int) -> int: if n == 0: return 1 if n == 1: return 1 dp = [0]*(n+1) dp[0], dp[1] = 1, 1原创 2021-02-24 22:07:18 · 43 阅读 · 0 评论 -
剑指offer 09:用两个栈实现队列
只用一次遍历就可以实现,栈1保存进来的元素,栈2用来弹出元素class CQueue: def __init__(self): self.stack1 = [] self.stack2 = [] def appendTail(self, value: int) -> None: self.stack1.append(value) def deleteHead(self) -> int: ..原创 2021-02-24 10:36:41 · 61 阅读 · 0 评论 -
寒假LeetCode刷题笔记/2021.01.28-
时间复杂度为O(log(n)),优先想到二分法原创 2021-01-28 15:50:02 · 46 阅读 · 0 评论 -
LeetCode.No.33 搜索螺旋排序数组
使用二分法class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: return ..原创 2021-01-26 16:22:28 · 152 阅读 · 0 评论 -
LeetCode.No.31 下一个排列
思路:需要重新排列的第一个数字必然为倒序不是升序的第一个数字class Solution: def nextPermutation(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ n = len(nums) if n == 1: retur...原创 2021-01-24 22:09:51 · 46 阅读 · 0 评论 -
LeetCode.No.29 两数相除
class Solution: def divide(self, dividend: int, divisor: int) -> int: MAX_INT = 2**31 - 1 MIN_INT = -2**31 #涉及符号问题的,用flag记录最后的符号 flag = 1 if dividend < 0: dividend, flag = -dividend, -flag...原创 2021-01-23 21:10:04 · 83 阅读 · 0 评论 -
三数之和/LeetCode.No.15/类似题目:No.1:两数之和 No.16:最接近的三数之和
思路:1.先排序保证不重复以及减小复杂度 2. 左右双指针,左指针右移,右指针左移代码实现:class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: n = len(nums) if n < 3: return [] nums.sort()#先排序,保证不重复并且减少时间复杂度 res = []..原创 2021-01-17 16:28:45 · 105 阅读 · 0 评论