![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
zjbzwhwhz
这个作者很懒,什么都没留下…
展开
-
42. 接雨水
class Solution: def trap(self, height: List[int]) -> int: # 边界条件 if not height: return 0 n = len(height) left,right = 0, n - 1 # 分别位于输入数组的两端 maxleft,maxright = height[0],height[n - 1] ans = 0 ...原创 2020-07-27 17:54:50 · 151 阅读 · 2 评论 -
旋转图像
给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]class Solution: def rotate(self, matrix): """ :type matrix: List[List[int]] :...原创 2020-07-27 11:01:15 · 69 阅读 · 0 评论 -
二分查找左右边界
https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/er-fen-cha-zhao-suan-fa-xi-jie-xiang-jie-by-labula/def left_erfen(nums, target): l = 0 r = len(nums) while (l < r): mid = (l + r) //原创 2020-07-24 16:00:13 · 140 阅读 · 0 评论 -
92. 反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# sel...原创 2020-07-22 00:06:47 · 56 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next...原创 2020-07-21 23:36:16 · 61 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点 LCOF
1# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteNode(self, head: ListNode, val: int) -> ListNode: if head.val == val:原创 2020-07-20 23:48:32 · 62 阅读 · 0 评论 -
剑指offer 52 两个链表的第一个公共节点
https://pic.leetcode-cn.com/f6572ac3036f5b8635f6e7f7ed74129c2bfd779d9d3d77a93c3bd487f24ca75d-%E5%B9%BB%E7%81%AF%E7%89%872.JPG第一轮遍历完后交换位置。o(m+n)class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: .原创 2020-07-20 23:35:55 · 100 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表 LCOF
1# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: cur = dum = ListNode(原创 2020-07-20 23:23:10 · 91 阅读 · 0 评论 -
翻转链表
翻转链表class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ # 申请两个节点,pre和 cur,pre指向None pre = None # 遍历链表,while循环里面的内容其实可以写成一行 # 这里只做演示,就不搞那么骚气的写法了 while head: # 记录当前节点的下一个节点 tmp =原创 2020-07-20 22:59:02 · 59 阅读 · 0 评论 -
链表中倒数第k个结点
双指针# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def getKthFromEnd(self, head: ListNode, k: int) -> ListNode: fir, sec = head, head原创 2020-07-20 22:36:06 · 58 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
借住栈class Solution: def reversePrint(self, head: ListNode) -> List[int]: stack = [] while head: stack.append(head.val) head = head.next return stack[::-1]原创 2020-07-20 22:31:21 · 121 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
class Solution: def maxDepth(self, root: TreeNode) -> int: if not root: return 0 return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1class Solution: def maxDepth(self, root: TreeNode) -> int: i...原创 2020-07-13 17:12:24 · 171 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]]class Solution: def levelOrder(self, root: Tree...原创 2020-07-13 14:58:26 · 156 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# ...原创 2020-07-13 12:38:51 · 104 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4/ \2 7/ \ / \1 3 6 9镜像输出:4/ \7 2/ \ / \9 6 31示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]class Solution: def mirrorTree(self, root:...原创 2020-07-13 09:16:27 · 105 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7# Definition for a binary tree node.# class TreeNode:# def __init__(se...原创 2020-07-09 10:59:00 · 150 阅读 · 0 评论 -
树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], ...原创 2020-07-08 23:30:22 · 96 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,11,2],...原创 2020-07-03 15:43:09 · 122 阅读 · 0 评论 -
树
剑指offer 二叉树中和为某一值的路径 树的子结构 重建二叉树 对称的二叉树 二叉树的镜像 从上到下打印二叉树 从上到下打印二叉树 II 从上到下打印二叉树 III 序列化二叉树 二叉树的深度 二叉搜索树的第k大节点 平衡二叉树 二叉搜索树的最近公共祖先 二叉树...原创 2020-07-01 01:21:57 · 91 阅读 · 0 评论 -
链表
1原创 2020-07-01 00:06:30 · 113 阅读 · 0 评论 -
647. 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".class Solution: def countSubstrings(self, s: str) ->原创 2020-06-16 23:27:52 · 96 阅读 · 0 评论 -
300. 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。class Solution: def lengthOfLIS(self, nums: List[int]) -> int: if not nums: ...原创 2020-06-16 00:39:05 · 96 阅读 · 0 评论 -
139. 单词拆分
给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", wordD...原创 2020-06-15 00:36:05 · 114 阅读 · 0 评论 -
121 买卖股票的最佳时机
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例...原创 2020-06-15 00:24:22 · 131 阅读 · 0 评论 -
70. 爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶斐波那契数列class Solution: d...原创 2020-06-14 23:44:07 · 72 阅读 · 0 评论 -
64. 最小路径和
给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。使用动态规划,和 62不同路径一起看https://blog.csdn.net/zjbzwhwhz/article/details/106753429class Soluti...原创 2020-06-14 23:37:02 · 92 阅读 · 0 评论 -
62 不同路径 - 动态规划
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?本质上就是一个 杨辉三角。这是个杨辉三角形,每个位置的路径 = 该位置左边的路径 + 该位置上边的路径动态规划时间 = 空间 = o(m*n)class Solution: def uniquePaths(self, m: int, n: int) -.原创 2020-06-14 22:53:12 · 119 阅读 · 0 评论 -
53 最大子序和 - 动态规划 & 分治
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。动态规划class Solution: def maxSubArray(self, nums: List[int]) -> int: max_f = nums[0] pre_f = nums[0] ...原创 2020-06-14 22:17:50 · 107 阅读 · 0 评论 -
5 最长回文子串 - 动态规划
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"python 代码:动态规划class Solution: def longestPalindrome(self, s: str) -> str: n = len(s) dp = [[False] *...原创 2020-06-14 22:00:58 · 71 阅读 · 0 评论 -
90 子集2
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution: def subs原创 2020-06-14 17:41:48 · 132 阅读 · 0 评论 -
47. 全排列 II
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]class Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: size = len(nums) if size == 0: return [] nums.sort()原创 2020-06-14 17:15:57 · 93 阅读 · 0 评论 -
46. 全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]class Solution: def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """原创 2020-06-12 00:03:41 · 74 阅读 · 0 评论 -
560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。使用 hashmap 来简化时间复杂度,这种算法的时间复杂度可以达到 O(n).具体算法:维护一个 hashmap,hashmap 的 key 为原创 2020-06-11 15:30:06 · 111 阅读 · 0 评论 -
283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: None Do not return anything, modify nums i原创 2020-06-08 10:39:48 · 68 阅读 · 0 评论 -
169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2二分排序,取中间值...原创 2020-06-08 09:53:07 · 64 阅读 · 0 评论 -
152. 乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。class Solution: def maxProduct(self, nums: List[int]) -> int: if not nu原创 2020-06-08 09:24:49 · 76 阅读 · 0 评论 -
128. 最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。class Solution: def longestConsecutive(self, nums): longest_streak = 0 num_set = set(nums) for num in num_set:原创 2020-06-07 22:14:22 · 109 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7递归class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode原创 2020-06-05 16:24:58 · 1405 阅读 · 1 评论 -
84. 柱状图中最大的矩形
相关单调栈问题:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/solution/bao-li-jie-fa-zhan-by-liweiwei1419/给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为原创 2020-06-02 15:06:44 · 146 阅读 · 0 评论 -
40. 组合总和 II
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]示例 2:输入:原创 2020-05-26 14:13:48 · 140 阅读 · 0 评论