leetcode100专题

贪心-leetcode100题目总结-c++实现

贪心的题目其实是不好做的,因为贪心只是一个思想,而非一个数据结构或者一个板子,有数据结构的题目反而很多操作都是常规化的 1.买卖股票使用一次扫描法 用于在过程中找到最大值或者最小值 用于顺序结题很有效,有点像哈希优化,在扫描这个数组的时候不断更新(用于后面元素对前面元素有覆盖作用的很有效!) class Solution {public:int maxProfit(vector<int>& p

LeetCode100.删除链表的倒数第 N 个结点

1. 题目大意 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 2. 思路分析 输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 我们可以先遍历一遍链表求出链表的长度,再遍历时遇到倒数第n+1个,可以直接删除第n个。 接下来是进阶,上面的方法需要遍历两遍链表,如果遍历一次那?答:使用双指针,A

代码随想录算法训练营第 51 天 |LeetCode99岛屿数量 LeetCode100.岛屿的最大面积

代码随想录算法训练营 Day51 代码随想录算法训练营第 51 天 |LeetCode99岛屿数量 LeetCode100.岛屿的最大面积 目录 代码随想录算法训练营前言LeetCode200 岛屿数量LCR 105. 岛屿的最大面积 一、广度优先搜索基础1、用队列实现2、代码框架: 二、卡码网99岛屿数量(LeetCode200 岛屿数量 )1.题目链接2.思路3.题解 三、LC

leetcode100相同的树

思路 主要是递归,判断终止条件 代码 public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null){//全为空return true;}if (p==null||q==null){ //有一个nullreturn false;}if (p.val != q.val){return false;}r

LeetCode100 刷题记录

文章目录 矩阵相关1. 旋转矩阵2. 搜索二维矩阵 矩阵相关 1. 旋转矩阵 题目描述: 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 题解思路: 先将矩阵上下翻转,然后对矩阵进行对角线翻转。 题解代码: class S

【leetcode100-086到090】【动态规划】一维五题合集2

【单词拆分】 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 思路: 首先,我们依次考虑s的前i个字母能否被分割,直到i=n; 对一个确定的i,我们尝试在前i个字母中进行分割,枚举每一个分割点,如果分割点前面的部分能分割(肯定已经

leetcode100~Same Tree

Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 该题比较简单,不作解释,不懂

【leetcode100-074/075/076】【堆】三题合集

【降序第k元素】 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路: 既然在堆专题,那我们就先用堆来解一下,用STL固然很爽,但这里还是得手撕一下,不然显得这个题很多余。。 首先是建堆过程,以本题需要的大根堆为例:我

【leetcode100-069到073】【栈】五题合集

【有效括号】 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。 思路: 遇到左括号入栈,遇到右括号弹一个出来看是否匹配,全部走完看栈里是否还有没配对的左括号,如果以上步骤中任意时刻出问题,直接返回false,都没

【leetcode100-051到054】【图论】四题合集

【岛屿数量】 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 思路: 很经典也很基础的图搜题,bfs或者dfs都行,这题先用dfs写一下。 每次开启函数(而不是被递归调用),会将当前起点能接触到的所有陆地都访问一次再退出,

【leetcode100-044到050】【二叉树】七题合集

昨天光写题忘写文章了,合并到今天一起写了///一共七个题/// 【二叉搜索树中第k小元素】 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 思路: 搜索树!第一反应肯定是中序升序。方便起见我们先建立一个全局变量用来记录当前访问的节点是第几个,然后把中序遍历的板子糊上去就好啦。这题标mid我是不同意的,他真的不配。。

【leetcode100-042/043】【二叉树】二叉搜索树的转换和验证

【转换】 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 思路: 可以说是递归板子题了。每次把数组切两半,中间数据拿来做根节点,左边部分继续建左子树,右边部分继续建右子树,只需要注意更改传入的参数就好啦。 class Solution {pu

【leetcode100-034】【链表/优先队列】合并k个升序链表

【题干】 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 【思路】 其实就是多路归并用一个优先队列简化k个头部的比较和选最小节点的过程然后就只剩一些细节处理啦都没啥好写的今天这题。。。 【题解】 class Solution {public:struct Status {int val;ListNode *ptr;bool ope

【leetcode100-032】【链表/回溯/哈希】随机链表的复制

【题干】 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不

【leetcode100-029】【链表/双指针】删除链表的倒数第N个节点

【题干】 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 【思路】 倒数k,自然首先考虑双指针,用指针间的距离完成倒数k的动作,并用快指针找到尾部位置考虑到是链表删除,且是单链表,要找的其实是倒k+1节点的指针,同时考虑到要返回的是表头,所以构造一个preHead方便操作,其next指针指向真正的头节点;快指针从表头开始走k步,此时慢指针指向preHead,两者之间有k个

【leetcode100-028】【链表】两数相加

【题干】 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 【思路】 乍一看有点麻烦,仔细一看啊这不小学加减法链表版吗!让我们来整一个进位位,作用跟小学加减法那个“有进位点个点”一样儿一样儿的。然后对较短

【leetcode100-025】【链表/快慢指针】环形链表

【题干】 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。

【leetcode100-024】【链表/快慢指针】回文链表

【题干】 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 【思路】 判回文,一般就两种思路,两头向中间判断直到相遇,或者从对称轴向两边判断直到边界。拿到链表的话,一时间看起来两种方式都不适配,因为不管哪一种都需要两个相反的枚举方向,而链表是单向枚举

【leetcode100-019】【矩阵】螺旋矩阵

【题干】 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 【思路】 不难注意到,每进行一次转向,都有一行/列被输出(并失效);既然已经失效,那我们不妨就将这一行/列删去,当然并不是真的删去,其实只要让其无法再被访问(遍历)到就可以了;那么我们是如何限定遍历的范围的呢,是给遍历指针设定上下界,因此,当我们不想让指针走到某一行/列,用上限把该