![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
全站最菜QAQ
我是一只小菜鸡o(╥﹏╥)o
展开
-
【leetcode】002.两数相加
【leetcode】002.两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头来源:力扣(LeetCode)链接:https://leetcode.cn/problems/add-two-numbers著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。比较容易漏掉的是最后的一次进位操作解法二 代码优原创 2022-06-06 20:55:58 · 128 阅读 · 0 评论 -
【剑指offer】036.二叉搜索树与双向链表
题目【剑指offer】036.二叉搜索树与双向链表解法二叉搜索树相关的题目,首先联想到中序遍历,因为中序遍历的结果刚好是有序的,大部分题目是在中序遍历的基础上稍微调整。这里用self.head和self.tail来记录。self.head在递归的时候只要赋值一次就可以了。self.tail会不停地变,当把root的左子树遍历完后,当前self.tail是指向左子树里面的最后一个节点。此时要把这个节点和root连接,并且把self.tail指向root。注意,此时不需要将self.tail和sel原创 2022-04-22 16:10:12 · 421 阅读 · 0 评论 -
【剑指offer】034.二叉树中和为某一值的路径
题目【剑指offer】034.二叉树中和为某一值的路径解法DFS。但是这里要注意python的一些特性。python传参传对象,可变对象可变,不可变对象不可变class Solution: def pathSum(self, root: TreeNode, target: int) -> List[List[int]]: res, cur = [], [] def dfs(root, tar): if not root: ret原创 2022-04-19 00:23:20 · 677 阅读 · 0 评论 -
【剑指offer】021.调整数组顺序使奇数位于偶数前面
题目【剑指offer】021.调整数组顺序使奇数位于偶数前面解法双指针class Solution: def exchange(self, nums: List[int]) -> List[int]: if len(nums)<=1: return nums l, r = 0, len(nums)-1 while l<r: if nums[l]%2==0 and nums[r]%2==1:原创 2022-04-18 00:05:21 · 286 阅读 · 0 评论 -
【剑指offer】022.链表中倒数第k个节点
题目【剑指offer】022.链表中倒数第k个节点解法双指针class Solution: def getKthFromEnd(self, head: ListNode, k: int) -> ListNode: p = head for i in range(k): p = p.next q = head while p: p = p.next q原创 2022-04-17 23:57:43 · 553 阅读 · 0 评论 -
【剑指offer】024.反转链表
题目【剑指offer】024.反转链表解法递归class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not head.next: return head new_head = self.reverseList(head.next) head.next.next = head head.nex原创 2022-04-17 23:53:24 · 362 阅读 · 0 评论 -
【剑指offer】033.二叉搜索树的后序遍历序列
题目【剑指offer】033.二叉搜索树的后序遍历序列解法递归class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: if len(postorder)<=1: return True root = postorder[-1] idx = -1 for i in range(len(postorder)-原创 2022-04-17 23:24:12 · 237 阅读 · 0 评论 -
【剑指offer】032.1/2/3从上往下打印二叉树
题目【剑指offer】032.1从上往下打印二叉树解法二叉树的层序遍历# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(self, root: TreeNod原创 2022-04-17 17:02:35 · 168 阅读 · 0 评论 -
【剑指offer】031.栈的压入、弹出序列
题目【剑指offer】031.栈的压入、弹出序列解法模拟class Solution: def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool: if len(popped)==0: return True stack = [] p = 0 for i in range(len(pushed)): stack.原创 2022-04-17 17:00:45 · 70 阅读 · 0 评论 -
【剑指offer】030.包含min函数的栈
题目【剑指offer】030.包含min函数的栈解法这道题有一定的技巧性,自己根本想不到还能利用一个辅助栈。class MinStack: def __init__(self): """ initialize your data structure here. """ self.stack = [] self.min_stack = [] def push(self, x: int) -> No原创 2022-04-17 16:05:28 · 65 阅读 · 0 评论 -
【剑指offer】028.对称的二叉树
题目【剑指offer】028.对称的二叉树解法解法1 层序遍历修改自己一开始只想到这种做法,层序遍历的过程中判断当前层的结果是否是回文。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:原创 2022-04-17 12:38:43 · 57 阅读 · 0 评论 -
【剑指offer】027.二叉树的镜像
题目【剑指offer】027.二叉树的镜像解法递归# 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, root: TreeNode) -> T原创 2022-04-16 21:46:24 · 205 阅读 · 0 评论 -
【剑指offer】026.树的子结构
题目【剑指offer】026.树的子结构判断树B是否为A的子结构解法递归的思路,应该先想到拆分子问题。借助先序遍历的流程,如果A当前节点值和B当前节点值相等,那么则可以调用isContain()判断以这两个节点为根节点的两个子树是否存在子结构关系。。如果不存在,则看A的左子树和B关系,否则看右子树和B关系。class Solution: def isContain(self, A, B): if B is None: return True原创 2022-04-16 21:17:22 · 220 阅读 · 0 评论 -
【剑指offer】25.合并两个排序的链表
题目【leetcode】25.合并两个排序的链表解法双指针两个指针分别指向两个链表,每次比较所指结点的数值,取较小的结点放到新链表中。注意一般会设个虚拟头结点,避免一些空链表问题。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def me原创 2022-04-16 12:10:53 · 216 阅读 · 0 评论 -
【leetcode】141.环形链表
题目【leetcode】141.环形链表判断链表是否有环解法快慢指针# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None# 判断链表是否含环class Solution: def hasCycle(self, head: Optional[ListNode]) -> b原创 2022-03-01 08:02:42 · 200 阅读 · 0 评论 -
【leetcode】876.链表的中间结点
题目【leetcode】876.链表的中间结点解法快慢指针# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def middleNode(self, head: ListNode) -> ListNode:原创 2022-02-27 21:51:39 · 278 阅读 · 0 评论 -
【leetcode】019.删除链表的倒数第n个结点
题目【leetcode】019.删除链表的倒数第n个结点解法快慢指针链表类题目的一个小tips是新建一个dummy节点# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def removeNthFromEnd(原创 2022-02-27 21:07:06 · 264 阅读 · 0 评论 -
【leetcode】206.反转链表1
题目【leetcode】206.反转链表1给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。解法三个指针class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not head.next: return head p = None q = head t = q.next原创 2022-02-22 22:37:20 · 227 阅读 · 0 评论 -
【leetcode】023.合并K个有序链表
题目【leetcode】023.合并K个有序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5-&g原创 2022-02-22 16:07:47 · 85 阅读 · 0 评论 -
【leetcode】021.合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/# 递归class Solution: def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]: if list1 is None: return list2原创 2022-02-17 21:46:14 · 246 阅读 · 0 评论 -
【剑指offer】014.剪绳子 1
题目【剑指offer】014.剪绳子 1给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3原创 2022-02-15 14:30:31 · 321 阅读 · 0 评论 -
【剑指offer】013.机器人的运动范围
题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m =原创 2022-02-10 16:35:44 · 74 阅读 · 0 评论 -
【剑指offer】012.矩阵中的路径
题目【剑指offer】012.矩阵中的路径给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [["A","B","C","E"],["S",原创 2022-01-20 15:52:02 · 74 阅读 · 0 评论 -
【剑指offer】011. 旋转数组的最小数字
题目【剑指offer】011. 旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0解法解法1暴力遍历一遍,时间O(n)解法原创 2021-12-30 20:51:07 · 58 阅读 · 0 评论 -
【剑指offer】010. 斐波那契数列①
题目【剑指offer】010. 斐波那契数列①写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。解法解法1递归递归会有很多重复原创 2021-12-29 22:20:29 · 398 阅读 · 0 评论 -
【剑指offer】009. 用两个栈实现队列
题目剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","de原创 2021-12-27 20:17:28 · 70 阅读 · 0 评论 -
【剑指offer】007. 重建二叉树
题目【剑指offer】007. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]限制:0 <= 节点原创 2021-12-27 19:21:39 · 206 阅读 · 0 评论 -
【剑指offer】006. 从尾到头打印链表
题目【剑指offer】006. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000解法3种class Solution: def reversePrint(self, head: ListNode) -> List[int]: p = head res = [] while p:原创 2021-12-27 17:18:32 · 63 阅读 · 0 评论 -
【剑指offer】005.替换空格
题目【剑指offer】005.替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000解法解法1掉包class Solution: def replaceSpace(self, s: str) -> str: return s.replace(' ', '%20')解法2直接遍历,时间O原创 2021-12-26 22:15:08 · 116 阅读 · 0 评论 -
【剑指offer】004.二维数组中的查找
题目【剑指offer】004.二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26,原创 2021-12-26 20:03:37 · 269 阅读 · 0 评论 -
【剑指offer】003.数组中的重复数字
题目【剑指offer】003.数组中的重复数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000解法解法1时间O(n),空间O(n)class Solution: def findRepea原创 2021-12-26 17:18:13 · 3169 阅读 · 0 评论 -
【数据结构】python 排序算法
python实现一些排序算法class Solution(object): def InsertSort(self, nums): for i in range(1, len(nums)): for j in range(i): if nums[j]>nums[i]: nums[j], nums[i] = nums[i], nums[j] return nums def ChooseSort(self, nums):原创 2021-12-23 22:03:00 · 488 阅读 · 0 评论 -
拼多多2020届提前批算法岗第一次笔试
拼多多2020届提前批研发岗笔试题目写的是大致意思。代码是在笔试后,自己完善的,仅供参考。不确定是否AC100%。编程题1 升序数组题目描述给你两个数组,数组1是近似升序的,也就是说可以通过修改其中某个数,使得数组1是严格的升序数组。现在问,是否可以从数组2中选一个数来对数组1中的某个数进行替换,使得数组1严格升序。如果可以,找出数组2中满足要求的最大的数对数组1进行修改,并打印出数...原创 2019-07-28 20:12:42 · 525 阅读 · 0 评论 -
【leetcode】 旋转数组中的查找系列
旋转数组中的查找系列文章目录旋转数组中的查找系列1. 旋转数组中的查找12. 旋转数组中的查找23. 旋转数组中的最小值14. 旋转数组中的最小值2这类题型主要是二分法的变形题,一般都是在二分法的代码上进行改进,可以分析 left mid right 这三个位置的相对大小情况来确定二分后两个区间内数据大小的分布情况来缩小范围进行二分。我一般是先分析mid 和 right 的相对大小情况,如果...原创 2019-07-27 16:29:16 · 156 阅读 · 0 评论 -
【leetcode】股票买卖系列总结
股票买卖系列总结股票买卖系列的题目在面试中还是比较经典的,这里对这一系列做一些简单的总结。1. 只允许买卖一次假设股票价格序列为(3, 5, 7, 3, 8, 1)动态规划。整个过程中的行为选择有3种,买/卖/无操作。用dp[i]dp[i]dp[i]表示第iii天的行为是”卖出“时,能得到的最大收益。显然,我们固定了卖出的时间,只要在这个时间点之前的时间中选择股票价格比最小的时候买入,就...原创 2019-07-27 16:28:09 · 183 阅读 · 0 评论