Leetcode
刷题的学习和解题过程
一只小团子
这个作者很懒,什么都没留下…
展开
-
2020-11-23 912 排序数组
快速排序学习:从数组中找一flag,从左右两端向中间遍历,将大于flag的放左边,小于flag的放右边,flag放中间。class Solution: def sortArray(self, nums: List[int]) -> List[int]: if nums==[] or nums==1: return nums flag=nums[0] left=[] right=[]原创 2020-11-23 23:09:55 · 139 阅读 · 0 评论 -
2020-11-23 本周刷题计划
这周计划刷排序。一、计划的定制看了一下网上对于知识点的划分。难度低的部分中,排序算法LeetCode按照怎样的顺序来刷题比较好? - LintCode领扣的回答 - 知乎这位博主也提供了每个小专题的划分:https://blog.csdn.net/pushup8https://zhuanlan.zhihu.com/p/57217890二、任务规划11.23 912. 排序数组 练习基础排序方法11.24 215. 数组中的第K个最大元素 快速排序11.25 75. Sort C原创 2020-11-23 11:41:01 · 157 阅读 · 0 评论 -
2020-11-17 114. 二叉树展开为链表
1、先完成了前序遍历:144. 二叉树的前序遍历【根左右】class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: if not root: return None nodelist=[] self.dfs(root,nodelist) return nodelist def dfs(self, root原创 2020-11-17 22:01:06 · 107 阅读 · 1 评论 -
2020-11-16 剑指 Offer 54. 二叉搜索树的第k大节点
一、二叉查找树二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。【左<根<右】二、遍历二叉树的遍历分为以下三种:先序遍历:遍历顺序规则为【根左右】中序遍历:遍历顺序规则为【左根右】后序遍历:遍历顺序规则为【左右根】(根在哪,就是什么序)中序原创 2020-11-16 21:59:27 · 116 阅读 · 0 评论 -
2020-11-13 104. 二叉树的最大深度
递归思想的理解参照知乎的答案:https://www.zhihu.com/question/314124361、第一递归函数功能: 二叉树的最大深度2、找出递归结束的条件:叶子节点 root=None3、找出函数的等价关系式:最大深度=max(l,r)+1,左右子树的最大深度+1左右的节点在实现时,都是作为根节点,进行下一次的递归。类似f( n )=max( f( r ) , f( l ) )+1,f是不变的,但是内容会变。f( n )=f( n-1 )+f( n-2)代码实现:第一次做递归的原创 2020-11-13 22:41:57 · 73 阅读 · 0 评论 -
2020-11-12 142. 环形链表 II
1、解题思路建立等式,求解x。已知,快指针的路程为慢指针的两倍,快指针的路程可描述为:x+y+n(y+z),慢指针的路程可描述为:x+y。求解x+y+n(y+z)=2*(x+y)整理公式:x = (n - 1) (y + z) + z ,当n=1,x=z,从相遇处到入口和头结点到入口的距离相同,当n≠1,说明从相遇点出发,转圈后能与从头节点出发的点在入口处相遇。2、首先改写了一下之前的环查找,把循环条件和判断条件调换了位置,将初始位置都定在了head处,符合我们的原理。从相遇点和头节点出发,以同原创 2020-11-12 21:10:18 · 97 阅读 · 0 评论 -
2020-11-11 剑指 Offer 52. 两个链表的第一个公共节点
解题思路:两个链表走到尾后,重新遍历另一个链表,走一样的路。如果有公共节点就会相遇,没有的话,就会null相同,退出循环。class Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:node1,node2=headA,headBwhile node1!=node2:node1=no原创 2020-11-11 22:36:23 · 118 阅读 · 0 评论 -
2020-11-9 141. 环形链表
解法一:直接用一个集合或list一遍把链表装进去,一边检查元素是否存在。用集合:class Solution: def hasCycle(self, head: ListNode) -> bool: seen=set() while head: if head in seen: return True seen.add(head) head=head.n原创 2020-11-09 23:07:29 · 107 阅读 · 0 评论 -
2020-11-5 445. 两数相加 II
class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: s1, s2 = [], [] while l1: s1.append(l1.val) l1 = l1.next while l2: s2.append(l2.val) l2 = l2.nex原创 2020-11-05 22:13:18 · 669 阅读 · 0 评论 -
2020-11-3 24. 两两交换链表中的节点
关键的解题思路:class Solution: def swapPairs(self, head: ListNode) -> ListNode: dummyHead = ListNode(0) dummyHead.next = head temp = dummyHead while temp.next and temp.next.next: node1 = temp.next n原创 2020-11-03 22:42:02 · 98 阅读 · 0 评论 -
2020-11-02 206. 反转链表
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reverseList(self, head: ListNode) -> ListNode: pre=None cur=head while原创 2020-11-02 22:43:21 · 56 阅读 · 0 评论