![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
九月的野花一片
总想在过去的时间里留下存在的痕迹
展开
-
Leetcode 51. N 皇后
题目链接51. N 皇后题目描述n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。需要满足同一行、列和同一对角线上只能有一个皇后。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]实原创 2022-01-13 15:15:47 · 129 阅读 · 0 评论 -
剑指 Offer II 076. 数组中的第 k 大的数字
题目链接:https://leetcode-cn.com/problems/xx4gT2/题目描述:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4上次面试遇到这个问题不太了解堆排序和快排partition过程,脑子里只有调库orz原创 2021-12-29 01:51:01 · 363 阅读 · 0 评论 -
Leetcode 链表相关问题 ( Python版 )
借用栈来从尾到头打印链表剑指 Offer 06. 从尾到头打印链表链表的反转需要灵活应用指针移动来解决相关问题Leetcode 206. 反转链表Leetcode 92. 反转链表 IILeetcode 2. 两数相加使用虚拟头节点来解决链表中的删除问题Leetcode 203. 移除链表元素Leetcode 237. 删除链表中的节点Leetcode 19. 删除链表的倒数第 N 个结点...原创 2021-11-17 20:39:20 · 635 阅读 · 0 评论 -
Leetcode 二叉树相关问题
104. 二叉树的最大深度111. 二叉树的最小深度226. 翻转二叉树100. 相同的树101. 对称二叉树222. 完全二叉树的节点个数110. 平衡二叉树112. 路径总和404. 左叶子之和原创 2021-11-05 02:01:26 · 4027 阅读 · 0 评论 -
Leetcode 347. 前 K 个高频元素
题目描述给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]实现class Solution: # 堆实现 def topKFrequent(self, nums: List[int], k: int) -> List[int]: dict_ = dict() # 开辟 dict 空间,存储数组中数字及出现频原创 2021-11-02 17:21:20 · 43 阅读 · 0 评论 -
二叉树前序、中序、后序深度遍历 (迭代法)
遍历顺序可以看作访问中间节点的顺序前序遍历:中间节点 --> 左子树 --> 右子树中序遍历:左子树 --> 中间节点 --> 右子树后序遍历:左子树 --> 右子树 --> 中间节点二叉树前序遍历(Leetcode 144)利用栈后进先出,先将左孩子入栈,再将右孩子入栈,最后入栈中间节点,当节点为空时,依次出栈def preorderTraversal(self, root: TreeNode) -> List[int]: if not r原创 2021-10-28 20:48:59 · 137 阅读 · 0 评论 -
Leetcode 19. 删除链表的倒数第 N 个结点
题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]实现快慢指针,快指针先走n步,两指针再同时走,快指针指向NULL时慢指针就指向要删除的节点,此时只要删除该节点。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.va原创 2021-10-27 23:51:07 · 89 阅读 · 0 评论 -
Leetcode 237. 删除链表中的节点
题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。链表至少包含两个节点。链表中所有节点的值都是唯一的。给定的节点为非末尾节点并且一定是链表中的一个有效节点。输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.实现只给了当前要删除的node节点而没有给链表的head节点,无法用普通的方式原创 2021-10-27 23:39:20 · 74 阅读 · 0 评论 -
Leetcode 203. 移除链表元素
题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]实现要删除一个节点,需要将它前一个节点的指针指向当前的后一个节点,再将当前节点的next指针置为空,就实现了这个节点的删除。创建虚拟头节点为了解决要删除的是head节点的问题。# Definition for singly-linked list.#原创 2021-10-27 18:40:22 · 78 阅读 · 0 评论 -
Leetcode 2. 两数相加
题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,8]输出:[7,0,2,1]解释:342 + 865 = 1207输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]实现数字都是原创 2021-10-27 17:38:24 · 112 阅读 · 0 评论 -
Leetcode92. 反转链表 II
题目描述给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]实现对于链表1->2->3->4->5,反转第2位到第4位,相当于先拿出3,插入到1和2之间变成1->3->2->4->5,再拿出4插入到1原创 2021-10-27 00:32:07 · 129 阅读 · 0 评论 -
Leetcode 206. 反转链表
题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL实现思路如图示用pre指针指向NULL,cur指针指向当前元素,不可用cur.next直接指向pre节点,这样失去与之后节点的联系。所以再创建next指针指向cur.next元素之后将cur.next指向pre节点,此时第一个节点的反转已完成,再将pre,cu原创 2021-10-26 15:01:16 · 87 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:head = [1,3,2]输出:[2,3,1]实现借用栈后进先出的特性,遍历链表将值加入栈中,再pop栈中元素。时间空间复杂度均为 O(n)# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Nonec原创 2021-10-26 13:58:27 · 78 阅读 · 0 评论 -
Leetcode 155. 最小栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。实现:例向minStack依次插入[-2, 0, -3, 1, 2, -4],数据栈依次插入元素,最小栈需要保持最小值在栈顶,当插入元素小于最小栈顶元素或者此时最小栈为空时,将当前元素入栈,否则将最小栈当前栈顶元素重复入栈。此时的数据栈和最小栈数据栈 stack-20-312-4最小栈 min_stack原创 2021-10-25 21:57:33 · 96 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )实现:队列:先进先出栈: 后进先出两个栈,stack1负责插入元素,插入操作的复杂度为 O(1)。stack2删除元素:如果stack2中有元素,弹出stack2中元素,否则,将stack1中元素一个个弹出到stack2中,再删除stack2中最后一个元素。clas原创 2021-10-25 17:45:52 · 47 阅读 · 0 评论