LeetCode
breeze_blows
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 39. 数组中出现次数超过一半的数字
链接:剑指 Offer 39. 数组中出现次数超过一半的数字用cur记录上一次访问的值,cnt表明当前值出现的次数,如果下一个值和当前值相同那么cnt++;如果不同cnt--,减到0的时候就要更换新的cur值了,因为如果存在超过数组长度一半的值,那么最后cur一定会是该值。可以这样理解,cnt的自加和自减就是在描述一种抵消关系,由于超过一半的出现次数,导致最后的cnt一定会是该值。https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci.原创 2020-08-21 19:46:17 · 204 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
链接:剑指 Offer 38. 字符串的排列递归生成串的全排列序列,注意在过程中判重就好class Solution: def permutation(self, s: str) -> List[str]: res = [] s = list(s) def dfs(s, cur): if cur == len(s): res.append(''.join(s))原创 2020-08-21 19:43:15 · 158 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
链接:剑指 Offer 34. 二叉树中和为某一值的路径递归遍历二叉树的所有可能路径就好了# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def pathSum(self, ro.原创 2020-08-21 19:39:56 · 167 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
链接:剑指 Offer 33. 二叉搜索树的后序遍历序列二叉搜索树的特点就是左子树<跟结点<右子树,所有判断是否为后序遍历就是用最后一个结点也就是根节点,然后用序列的前半段去比较根节点找到左子树,如果后半段满足右子树的要求及大于当前根节点,即满足条件,接着递归判断左右子树。class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: def dfs(left, righ原创 2020-08-21 19:37:18 · 186 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
链接:剑指 Offer 32 - III. 从上到下打印二叉树 III层次遍历二叉树的基础上每次用一个数组保存当前层的结点,然后按照奇偶层进行反序就好了# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass So..原创 2020-08-21 19:31:20 · 145 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
链接:剑指 Offer 32 - II. 从上到下打印二叉树 II层次遍历二叉树的基础上每次用一个数组保存当前层的结点就好了# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def.原创 2020-08-21 19:28:27 · 252 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
链接:剑指 Offer 32 - I. 从上到下打印二叉树层次遍历二叉树,用一个队列模拟就可以了# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(sel原创 2020-08-21 15:50:40 · 172 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
链接:剑指 Offer 31. 栈的压入、弹出序列用中间的一个数组cur模拟压栈,然后和poped匹配,不能匹配的时候就继续进行压栈操作,如果最后cur为空就证明成功class Solution: def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool: cur = [] j = 0 for i in range(len(push.原创 2020-08-21 15:47:48 · 132 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
链接:剑指 Offer 30. 包含min函数的栈用一个队列保存当前栈的非严格下降序列就好了class MinStack: def __init__(self): """ initialize your data structure here. """ self.A = [] self.B = [] #维护A中的非严格降序的元素 def push(self, x: int) -> No.原创 2020-08-21 15:37:04 · 126 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
链接:剑指 Offer 29. 顺时针打印矩阵简单模拟就好了class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if len(matrix) == 0: return [] l, r, t, b = 0, len(matrix[0])-1, 0, len(matrix)-1 res = []原创 2020-08-14 20:31:51 · 127 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
链接:剑指 Offer 28. 对称的二叉树分别判断左右子树是否是对称的,判断的时候下判断左右子树的root结点的值是否相等,然后在判断左子树的右子树,右子树的左子树是否相同。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None原创 2020-08-14 16:47:45 · 133 阅读 · 1 评论 -
剑指 Offer 27. 二叉树的镜像
链接:剑指 Offer 27. 二叉树的镜像相当于交换左右子树,可以用递归,也可以用栈# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def mirrorTree(self, ro原创 2020-08-14 16:37:29 · 108 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
链接:剑指 Offer 26. 树的子结构先判断B是否为A当前的子结构,如果不是,递归判断B是否为A左子树的子结构,是否为A右子树的子结构。注意判断两个结构是否相同的时候应该单独用一个函数实现# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.rig.原创 2020-08-14 16:32:22 · 166 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
链接:剑指 Offer 25. 合并两个排序的链表依次判断两个链表的结点大小,依次遍历即可# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNo.原创 2020-08-14 16:19:30 · 142 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/头插法建表即可# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def rev原创 2020-08-14 16:14:27 · 133 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/设置双指针,后面一个指针找到第k个结点之后,前面的一个指针开始移动,直至后面的直至达到链表末尾的时候,前面的指针就刚好在链表的倒数第k个结点的位置# Definition for singly-linked list.# class ListNode:# def __ini原创 2020-08-14 16:11:40 · 142 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/用快排的思想,设置两个指针分别从前后开始寻找偶数与奇数,找到后就进行交换直至相遇class Solution: def exchange(self, nums: List[int]) -> List[int]: .原创 2020-08-14 16:07:35 · 107 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/不断遍历链表,找到指定值结点的前一个结点就可以实现删除# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next =原创 2020-08-14 16:04:00 · 103 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/主要就是要考虑n很大的时候,用字符串代替数值打印即可class Solution: def printNumbers(self, n: int) -> List[int]: # return [i for i in range(1, 10**n)] .原创 2020-08-14 15:59:32 · 109 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
剑指 Offer 16. 数值的整数次方链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/快速幂的用法,只是这里需要注意的是如果是负幂数,底数换成倒数。时间复杂度O(log2n),移位的时间,空间复杂度:O(1)class Solution: def myPow(self, x: float, n: int) -> float: if n < 0: .原创 2020-08-07 20:17:03 · 140 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/二进制的简单应用,代码中第一种写法时间复杂度:O(log2n),空间复杂度:O(1);第二种写法中注意n&(n-1)可以消除掉n的最左边的1,时间复杂度:O(M),M为数字n中1的个数,空间复杂度:O(1)class Solution: def hammingWeight(self, n: in原创 2020-08-07 20:09:59 · 222 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II
剑指 Offer 14- II. 剪绳子 II链接:https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/剪绳子的思想跟https://blog.csdn.net/breeze_blows/article/details/107869399是一致的,只是这里涉及到大数,所以用到快速幂:https://zhuanlan.zhihu.com/p/95902286class Solution: def cuttingRo..原创 2020-08-07 20:03:16 · 128 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子
剑指 Offer 14- I. 剪绳子链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/用算法几何不等式,m个数字和是一定的情况下,要想使得乘积是最大的,这m个数字肯定是相等的,然后考虑相等的时候利用求导得出最小值(https://leetcode-cn.com/problems/jian-sheng-zi-lcof/solution/mian-shi-ti-14-i-jian-sheng-zi-tan-xin-si-xiang-.原创 2020-08-07 19:59:01 · 139 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
剑指 Offer 12. 矩阵中的路径链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/dfs的做法,选择矩阵的每个点进行dfs即可class Solution: def exist(self, board: List[List[str]], word: str) -> bool: def dfs(i, j, k): if i < 0 or i &g原创 2020-07-31 10:54:12 · 121 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 11. 旋转数组的最小数字链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/以数组的最小元素为界,数列的前后都是有序的,所以可以采用二分查找,判断数列中间元素和最右边元素的大小可以想象有这样的图:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/xuan原创 2020-07-31 10:48:05 · 119 阅读 · 2 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/斐波拉契数列的变种,n级台阶的跳法为(n-1)和(n-2)级跳法的和class Solution: def numWays(self, n: int) -> int: if n == 0: return 1 if n <= 2:原创 2020-07-31 10:42:07 · 115 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- I. 斐波那契数列链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/简单模拟class Solution: def fib(self, n: int) -> int: a, b = 0, 1 for _ in range(n): a, b = b, a+b return a % 1000000007.原创 2020-07-31 10:38:01 · 114 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
剑指 Offer 13. 机器人的运动范围链接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/典型的用dfs或者bfs的题目,另外还有一种dp的方式,因为这里的坐标都是递增的,所以可以简化的只考虑值向右或者向下移动即可。bfs:注意python中计算数的每个位之和的方式,还有用set来判断当前位置是否被访问过class Solution: def movingCount(se...原创 2020-07-28 23:18:15 · 134 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/用两个栈实现队列,用一个栈A来模仿进队操作,当出队的时候将栈A的元素全部pop到第二个栈B中,最后一个pop出来的元素进行出队,时间复杂度O(N), 空间复杂度O(N)class CQueue: def __init__(self): self.s1 = [] .原创 2020-07-23 16:57:40 · 119 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/前序和中序重建二叉树,先在前序中找到根节点,然后在中序列表中找到根节点的位置,然后递归分别建立左右子树。这里可以用哈希表存储中序各个节点的位置,避免递归的时候在中序中找到根节点需要每次遍历中序列表。时间复杂度O(N), 空间复杂度O(N)# Definition for a binary tree node.# class.原创 2020-07-23 16:45:16 · 154 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/数组简单应用,依次存储链表各个节点的值,然后反转就好了# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.原创 2020-07-23 16:34:16 · 176 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/字符串的简单用法class Solution: def replaceSpace(self, s: str) -> str: c = [] for ss in s: if ss == ' ': c.append("%20")原创 2020-07-16 21:08:42 · 159 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/利用数组有序的特点,可以选择从右上角或者左下角遍历数组与target作比较,如果选择左上角或者右下角是不好比较的,比如选择右下角,如果target小于当前数组元素,此时的行列都得减少,容易错过target值,时间复杂度O(M+N), 空间复杂度O(1)class Solution: de.原创 2020-07-16 20:59:25 · 237 阅读 · 1 评论 -
剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/如果直接采用数组或者字典,遍历原数组nums判断有无重复元素会超时,需要采用哈希表的思想,让num[i]在数组的第i个位置。时间复杂度O(N),空间O(1)class Solution: def findRepeatNumber(self, nums: List[int]) -> int:原创 2020-07-16 20:27:41 · 139 阅读 · 0 评论 -
LeetCode刷题记录
LeetCode刷题记录题目链接题解备注第1章 统计学习方法概论(LeastSquaresMethod)传送门传送门原创 2020-07-16 10:51:53 · 223 阅读 · 0 评论 -
2. Add Two Numbers
python# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def addTwoNumbers(self, l1, l2): ...原创 2019-02-22 20:06:07 · 114 阅读 · 0 评论 -
3. Longest Substring Without Repeating Characters
class Solution: def lengthOfLongestSubstring(self, s): dict = {} ans = 0 start = 0 for i, c in enumerate(s): if c in dict: ...原创 2019-02-22 20:14:27 · 102 阅读 · 0 评论 -
11. Container With Most Water
class Solution: def maxArea(self, height): left, right = 0, len(height)-1 water = 0 while left <= right: water = max(water, (right-left)*min(height[left],...原创 2019-02-23 10:29:08 · 118 阅读 · 0 评论 -
15. 3Sum
class Solution: def threeSum(self, nums): nums.sort() Sum = [] for i in range(len(nums)-2): if i > 0 and nums[i] == nums[i-1]: continue ...原创 2019-02-23 10:52:39 · 113 阅读 · 0 评论 -
17. Letter Combinations of a Phone Number
pythonclass Solution: def letterCombinations(self, digits): # dict = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'} # ...原创 2019-02-25 21:30:25 · 119 阅读 · 0 评论