- 博客(41)
- 收藏
- 关注
原创 二分法和牛顿法求平方根 python
二分法def erfen(num): e = 0.001 if num < 1: up = 1 low = num else: up = num low = 0 res = (up+low)/2 count = 1 while abs(num-res**2) > e: if num-res**2 < 0: up = res
2020-08-04 11:48:14
382
原创 二叉树的深度优先搜索和广度优先搜索 python
二叉树的深度优先搜索和广度优先搜索 python描述深度优先搜索使用栈,先进后出广度优先搜索使用队列,先进先出描述深度优先搜索,先遍历左子树,再遍历右子树广度优先搜索,相当于直接横向打印二叉树深度优先搜索使用栈,先进后出将根节点append进栈,将根节点弹出,先进入右子节点,再进入左子节点import collectionsstack = []stack.append(root)while stack: node = stack.pop() if node.right is
2020-07-22 22:23:58
391
原创 剑指offer35:复杂链表的复制 python
剑指offer35:复杂链表的复制 python题目描述解法题目描述解法深度优先搜索在这里插入代码片class Solution: def copyRandomList(self, head: 'Node') -> 'Node': def dfs(node): if node is None: return None if node in visited:
2020-07-21 16:05:38
222
原创 剑指offer64:求1+2+…+n python
剑指offer64:求1+2+…+n python题目描述解法题目描述解法利用逻辑运算class Solution: def __init__(self): self.res = 0 def sumNums(self, n: int) -> int: n > 1 and self.sumNums(n-1) #对于and如果为真,返回后面的表达式,对于or,如果为真,返回前面的表达式 self.res += n
2020-07-20 20:48:20
384
原创 剑指offer04:二维数组中的查找 python
剑指offer04:二维数组中的查找 python题目描述解法题目描述解法从左下角开始遍历,如果值比较小,那么右移,如果值大,那么上移。class Solution: def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: j = 0 i = len(matrix)-1 if i < 0: return Fa
2020-07-20 16:48:37
189
原创 剑指offer10:青蛙跳台阶问题 python
剑指offer10:青蛙跳台阶问题 python题目描述解法题目描述解法采用动态规划,但是动态规划,递归的方式虽然好理解,但是存储时候需要占用的内存过大,所以采用从小到大class Solution: def numWays(self, n: int) -> int: a,b =1,1 for i in range(1,n): a,b = a+b,a return a%1000000007...
2020-07-20 16:09:01
116
原创 剑指offer58: 翻转单词顺序 python
剑指offer58: 翻转单词顺序 python题目描述解法题目描述解法split函数之后再反转列表class Solution: def reverseWords(self, s: str) -> str: str_list = s.split() str_list = str_list[::-1] return ' '.join(str_list)倒着遍历该str设置两个指针,一个指向单词的开头,另一个指向单词的末尾
2020-07-20 15:41:43
141
原创 剑指offer53:0~n-1中缺失的数字 python
剑指offer53:0~n-1中缺失的数字 python题目描述解法题目描述解法二分法,判断该位置的数字是否与该位置的索引相等,最后跳出的条件是两个指针相遇(但是如果想使两个指针相遇,那么必须是指针=mid+(-)1,不能是指针=mid)class Solution: def missingNumber(self, nums: List[int]) -> int: i = 0 j = len(nums)-1 while i <=
2020-07-20 14:40:36
199
原创 剑指offer59:滑动窗口的最大值 python
剑指offer59:滑动窗口的最大值 python题目描述解法题目描述解法设置队列,保证第一位一直是最大并且属于该滑动窗口的class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: deque = collections.deque() n = len(nums) res = [] if len(nums) == 0
2020-07-20 12:15:07
263
原创 剑指offer61:扑克牌中的顺子
剑指offer61:扑克牌中的顺子题目描述解法题目描述解法一、 如果想把这5张牌排成顺子,这五张牌除了0之外,不能有重复的值这五张牌最大值和最小值的差小于5如果想排列成顺子,那么必须满足上面两点要求class Solution: def isStraight(self, nums: List[int]) -> bool: repeat = set() max_num = 0 min_num = 14 for n
2020-07-20 10:47:44
104
原创 剑指offer29: 顺时针打印矩阵 python
剑指offer29: 顺时针打印矩阵 python题目描述解法题目描述解法利用python的函数,观察发现,应该是先输入第一行之后把第一行pop然后转置,反向之后再输出第一行,具体的流程可以看下图~有一些些不太清晰~具体代码如下:class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: res = [] while matrix:
2020-07-12 11:44:55
261
原创 剑指offer11:旋转数组的最小数字 python
剑指offer11:旋转数组的最小数字 python题目描述解法:二分查找法题目描述解法:二分查找法class Solution: def minArray(self, numbers: List[int]) -> int: i = 0 j = len(numbers)-1 while i < j: m = (i+j)//2 if numbers[m] < numbers[j]:
2020-07-12 10:23:41
342
原创 剑指offer53:在排序数组中查找数字 I python
剑指offer53:在排序数组中查找数字 I python题目描述解法:二分搜索左右边界题目描述解法:二分搜索左右边界class Solution: def search(self, nums: List[int], target: int) -> int: if len(nums) == 0: return 0 i = 0 j = len(nums)-1 while i <= j:
2020-07-11 23:06:53
238
原创 剑指offer60:n个骰子的点数 python
剑指offer60:n个骰子的点数 python题目描述解法-动态规划题目描述解法-动态规划class Solution: def twoSum(self, n: int) -> List[float]: dp = [[0 for _ in range(6*n) ] for i in range(n)] for i in range(6): dp[0][i] = 1 for i in range(1,n):
2020-07-11 18:13:32
143
原创 剑指offer28:对称二叉树 python
剑指offer28:对称二叉树 python题目描述解法题目描述解法class Solution: def isSymmetric(self, root: TreeNode) -> bool: def cur(L, R): if not L and not R: return True if not L or not R or L.val != R.val: return False return
2020-07-10 19:12:04
198
原创 剑指offer55-II:平衡二叉树 python
剑指offer55-II:平衡二叉树 python题目描述解法题目描述解法二叉树深度+剪枝class Solution: def isBalanced(self, root: TreeNode) -> bool: def Depth(root): if root is None: return 0 left = Depth(root.left) if left ==
2020-07-10 17:13:38
261
原创 动态规划详解(leetcode例题+解析)python
动态规划详解(leetcode例题+解析)python一级目录例题+解析三级目录一级目录例题+解析斐波那契数class Solution: def fib(self, N: int) -> int: for i in range(N+1): if i == 0: res = 0 pre2 = 0 elif i == 1:
2020-07-10 10:33:03
342
原创 基础排序算法整理-超级简单易懂 python
排序算法整理简介冒泡排序快速排序简单插入排序三级目录简介十种常见的算法可以分为两种:第一种是比较类排序,也成为线性排序,其时间复杂度不能超过O(nlogn)第二种是非比较类排序,不通过比较来决定元素间的相对排序,时间复杂度可以超过O(nlogn)那么各个方法的复杂度如下:冒泡排序冒泡算法的思想是:指针从第一个数开始与其后面一个数进行比较如果后面一个数较大,则指针指向后面一个数;如果前面一个数较大,则两个数交换位置,指针指向大的数直到最大的数放到了最后一个位置,指针从头开始重复
2020-07-08 20:47:26
260
原创 剑指offer18:删除链表的节点 python
剑指offer18:删除链表的节点 python题目描述解法题目描述解法class Solution: def deleteNode(self, head: ListNode, val: int) -> ListNode: node = head if head.val == val: #如果head就相等的话,那么直接返回head.next return head.next while head.next: #
2020-07-07 11:02:23
181
原创 剑指offer50:第一个只出现一次的字符 python
剑指offer50:第一个只出现一次的字符 python题目描述解法题目描述解法计算每个字符出现的次数,并用一个dictionary存储。如果出现一次以上的value置为False,出现一次置为True,最后输出第一个为True的key。不存在则输出空 def firstUniqChar(self, s: str) -> str: dic = {} for char in s: if char not in dic.keys():
2020-07-02 20:58:52
202
原创 剑指offer62:圆圈中最后剩下的数字 python
剑指offer62:圆圈中最后剩下的数字 python题目描述解法三级目录题目描述解法仿真模拟法,模拟真实情况利用迭代或者递归,真实模拟该问题该问题描述的是每次都去掉第m个数字,那么就是pop掉第m%len(nums),其中nums是1,。。。,n-1组成的列表。然后下一轮也是从m%len(nums)开始,因为去除掉了一个数字,后面所有的数字的索引都移动了一位。class Solution: def lastRemaining(self, n: int, m: int) ->
2020-07-02 10:42:21
186
原创 剑指offer52:两个链表的第一个公共节点 python
剑指offer52:两个链表的第一个公共节点 python题目描述解法题目描述解法该题思考的是,如果一个指针把这首先走一遍链表A再走一遍链表B,另一个指针首先走一遍链表B再走一遍链表A,如果两个指针同时出发,那么他们一定会在两个链表相接处相遇(因为两个指针都走了M+N步,其中M是链表A的总长度,N是链表B单独的那部分的长度(不包含两者相接的部分))。这时候如果没看明白的话,可以自己在纸上画一下~~那如果两个链表根本不相交呢?那我们可以认为他们是在null节点相交的呀~代码如下:class S
2020-07-01 21:06:41
260
原创 剑指offer21:调整数组顺序使奇数位于偶数前面 python
剑指offer21:调整数组顺序使奇数位于偶数前面 python题目描述解法题目描述解法最容易想到的方法就是定义两个临时列表分别存储奇数和偶数class Solution: def exchange(self, nums: List[int]) -> List[int]: nums1 = [] nums2 = [] for ele in nums: if ele % 2 == 1:
2020-07-01 14:41:31
271
原创 剑指offer57:和为s的两个数字 python
剑指offer57:和为s的两个数字 python题目描述解法题目描述解法双指针由于是递增数列,所以两个指针分别放在头尾。如果和大于target那么尾指针往左移一位,反之,头指针右移一位。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: i, j = 0, len(nums)-1 while i != j: if num
2020-07-01 14:16:27
207
2
原创 剑指offer03:数组中重复的数字 python
剑指offer03:数组中重复的数字 python题目描述解法题目描述解法最简单的就是直接统计每个数字的数量,遇到数量大于2的返回但是这道题有个限制说是nums中所有的数字在0 - n-1范围内,所以可以把每个元素都放到相等的索引位置上,如果有一个位置上有两个元素,那这个元素就是重复。class Solution: def findRepeatNumber(self, nums: List[int]) -> int: i = 0 whil
2020-06-30 16:10:47
333
原创 剑指offer39:数组中出现次数超过一半的数字 python
剑指offer39:数组中出现次数超过一半的数字 python题目描述解法题目描述解法最简单的方法就是统计个数法时间复杂度O(n),空间复杂度也O(n)class Solution: def majorityElement(self, nums: List[int]) -> int: num_dic = {} for ele in nums: if ele not in list(num_dic.keys()):
2020-06-30 15:36:46
178
原创 剑指offer68:二叉搜索树的最近公共祖先 python
剑指offer68:二叉搜索树的最近公共祖先 python题目描述解法思考与感想题目描述解法这道题与二叉树的最近公共祖先最大的不同就是,二叉搜索树的性质:root的节点大于其左子树所有的节点,小于其右子树上所有的节点这说明,我们可以通过判断root的值来判断p和q是否在该节点的左右子树上。如果root大于p,小于q,那么root为最近的公共祖先如果root等于p或q那么root为最大的公共祖先迭代法class Solution: def lowestCommonAnce
2020-06-30 14:54:59
186
原创 剑指offer68:二叉树的最近公共祖先 python
剑指offer68:叉树的最近公共祖先 python题目描述解法思考感想题目描述解法首先思考该问题时候要确定什么时候该node是p和q的最近公共祖先(如果要求所有公共祖先的话,那么最近公共祖先的所有祖先都应该在这个列表中。)p和q分别位于node的左子树和右子树上p位于q的左子树或者右子树上(反之亦然)这时,我们可以采用递归的方法:class Solution: def lowestCommonAncestor(self, root: TreeNode, p: TreeN
2020-06-30 11:32:13
1841
原创 offer32:从上到下打印二叉树 II python
offer32:从上到下打印二叉树 II python题目描述解法队列法递归法思考感想题目描述解法队列法定义一个队列来存储每一层的节点,当前节点遍历完之后重新给这个队列赋值下一层的所有节点。class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if root is None: return [] res = [] queu
2020-06-29 16:04:36
3218
原创 剑指offer57:和为s的连续正数序列 python
剑指offer57:和为s的连续正数序列 python题目描述解法双指针定义区间法利用等差数列加和的方法思考感想题目描述解法双指针定义区间法定义两个指针,两个指针窗口内的数字相加。如果加和小于等于target那么右指针向右移一个位置,如果加和大于target,那么左指针向右移一位。class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: i = 1
2020-06-29 15:18:33
319
原创 剑指offer09:用两个栈实现队列 python
剑指offer09:用两个栈实现队列 python题目描述解法思考感想题目描述解法在python中需要用两个list来实现栈的功能,由于栈是先进后出,所以无法直接删除head部分,需要先把数据全部倒到另一个list B中之后再把list B中的元素pop出来这时,需要考虑三种情况:list A不为空,list B为空。说明list A中的元素没有全部倒到list B中,需要先倒到list B中list A不为空,list B也不为空。说明list B中已经有部分之前的元素,这时需要注意的是!
2020-06-28 20:32:43
299
原创 剑指offer54:二叉搜索树中的第k大节点 python
剑指offer54:二叉搜索树中的第k大节点 python题目描述解法思考感想题目描述解法这道题最重要的是利用二叉树本身的性质:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点。注意:左子树上所有结点的值均小于它的根结点的值所以二叉树中序遍历(左子树->根节点->右子树)是
2020-06-28 19:52:20
149
原创 剑指offer15:二进制中1的个数 python
剑指offer15:二进制中1的个数 python题目描述解法1. 移位法2. n&(n-1)法3. 偷懒利用语言特性法思考感想题目描述解法1. 移位法利用位的运算,比如a = 0011 1100那么位>>的运算为:a >> 2输出0000 1111将后面两位往后移,高位补0。位运算符号&a = 0011 1100b = 000 1101a&b = 000 1100更多位运算符号可以看这里非常详细利用上述特性我们可
2020-06-28 19:01:50
262
1
原创 剑指offer25:合并两个排序的链表 python
剑指offer25:合并两个排序的链表 python题目描述解法1. 双指针法,一个指针指向第一个链表,一个指针指向另一个链表递归法思考感想题目描述解法1. 双指针法,一个指针指向第一个链表,一个指针指向另一个链表class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: dump1 = ListNode(0) #引入伪节点 dump = dump1
2020-06-28 16:44:08
277
原创 剑指offer24:反转链表 python
剑指offer24:反转链表 python题目描述解法1. 使用队列2. 双指针3.递归思考与感想题目描述解法1. 使用队列先遍历整个链表并用一个队列存储(append)node,然后使用pop的性质,先进去的后出来,更新到最后一个节点的next上。class Solution: def reverseList(self, head: ListNode) -> ListNode: if head is None: return None
2020-06-26 18:22:58
223
原创 剑指offer06:从尾到头打印链表 python
剑指offer06:从尾到头打印链表 python题目描述解法非递归,将链表的值从头到尾输入到list,再反转list递归思考与感想题目描述解法非递归,将链表的值从头到尾输入到list,再反转listclass Solution: def reversePrint(self, head: ListNode) -> List[int]: if head is None: return [] node = head
2020-06-26 16:57:21
180
原创 剑指offer05:替换空格 python
剑指offer05:替换空格 python题目描述解法思考题目描述解法class Solution: def replaceSpace(self, s: str) -> str: #字符串不可变 slt = [] for c in s: if c == ' ': slt.append('%20') else: slt.appen
2020-06-26 16:28:37
279
原创 剑指offer17:打印从1到最大的n位数 python
剑指offer17:打印从1到最大的n位数 pythonleetcode上的题目比较奇怪,参考原版剑指offer,其实应该是主要考大数溢出的问题,转化为字符串。def dfs(x): if x == n: #固定为所有位之后停止 res.append(''.join(nums)) #把固定得到的数加在result后面 return for i in range(10)
2020-06-26 15:55:21
177
原创 剑指offer27:二叉树镜像 python
剑指offer27:二叉树镜像 python题目叙述递归方法非递归方法题目叙述递归方法时间久,但是占用内存少// An highlighted blockclass Solution: def mirrorTree(self, root: TreeNode) -> TreeNode: if not root: return None root.left, root.right = root.right, root.left
2020-06-23 21:29:53
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人