Leetcode 刷题笔记
文章平均质量分 95
刷题过程中记录的解题思路,方便自己再次查看,也是对自己学习的记录与监督,也可以供其他的同学学习参考。如果有任何写的不对的地方请在评论区指点讨论。
Perrysky
喜欢编程
展开
-
Leetcode746.使用最小花费爬楼梯(简单)动态规划 贪心 C++
题目描述:746. 使用最小花费爬楼梯数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:输入: cost = [1,原创 2020-12-22 21:30:04 · 258 阅读 · 0 评论 -
Leetcode96.不同的二叉搜索树(中等)C++ 递归 动态规划
题目描述:96. 不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3 2/ / \ 2 1 2原创 2020-12-17 22:24:53 · 195 阅读 · 0 评论 -
Leetcode98.验证二叉搜索树(中等)C++ 数组 递归 迭代
题目描述:98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。思路描述:首先一原创 2020-12-17 20:20:19 · 236 阅读 · 3 评论 -
Leetcode45.跳跃游戏II(困难)C++ 贪心
题目描述45. 跳跃游戏 II给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。思路描述// 以最小的步数得到最大的覆盖范围(即数组的最后位置)// 思路是 用局部最优得到全局最优,即当前的每一步都尽量走最大原创 2020-12-12 22:14:00 · 232 阅读 · 0 评论 -
Leetcode122.买卖股票的最佳时机II (简单)贪心思想 C++
题目概述:122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 =原创 2020-12-08 20:23:53 · 147 阅读 · 0 评论 -
leetcode55.跳跃游戏(贪心思想)多个解法 C++
Leetcode 55.跳跃游戏题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不原创 2020-12-08 19:43:30 · 218 阅读 · 0 评论 -
动态规划问题的学习思路总结
动态规划问题的学习思路总结1、由斐波那契数列引入重叠子问题(斐波那契数列严格来说不是动态规划问题)1)暴力递归int fib(int n){ if( n ==1 || n == 2) return 1; return fib(n-1) + fib(n-2);}时间复杂度为:O(2^n)画出递归树:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpsBQRSE-1600873191052)(C:\Users\Perry\AppD原创 2020-09-23 23:01:23 · 267 阅读 · 0 评论 -
Leetcode 面试题 08.11 硬币 (中等) 动态规划(完全背包问题)
题目描述:硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入: n = 5输出:2解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2:输入: n = 10输出:4解释: 有四种方式可以凑成总金额:10=1010=5+510=...原创 2020-04-30 18:30:53 · 301 阅读 · 0 评论 -
Leetcode 24. 两两交换链表中的节点(中等) 递归法与非递归法(迭代法)
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.来源:力扣(LeetCode)思路:1、迭代法整个思路是, pre,now,nex, nex->next;...原创 2020-04-27 21:38:23 · 196 阅读 · 0 评论 -
leetcode 234. 回文链表(简单) 快慢指针 和 栈
题目描述:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路:首先想到的是:用栈存下链表的所有结点值,然后链表头开始的遍历与栈顶元素比较,相等就出栈,继续移动比较,否则返回false(可...原创 2020-04-24 20:49:23 · 274 阅读 · 1 评论 -
Leetcode 206. 反转链表(简单) 递归法 和 迭代法
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked...原创 2020-04-24 17:27:48 · 282 阅读 · 0 评论 -
Leetcode 92.反转链表II (中等)(递归反转单链表的一部分)
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* successor = NULL; //存放后驱节点struct ListNode* reverseN(struct Li...原创 2020-03-19 22:55:55 · 257 阅读 · 0 评论 -
Leetcode 1290. 二进制链表转整数(简单) 位运算 的应用
题目描述:给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)示例 2:输入:head = [0]输出:0示例 3:输入:head = [1]输出...原创 2020-04-24 16:42:18 · 183 阅读 · 0 评论 -
Leetcode 82. 删除重复的数字(中等) 双指针
题目描述:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3思路:用一个空指针指向链表头,然后通过 slow 和 fa...原创 2020-04-24 16:15:47 · 203 阅读 · 0 评论 -
Leetcode 429. N叉树的层次遍历(中等) 队列实现层次遍历 C++
题目描述:给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个3叉树:返回其层序遍历:[ [1], [3,2,4], [5,6]]说明:树的深度不会超过1000。树的节点总数不会超过5000。思路:首先用一个队列来存储每一个树结点。通过两层循环,第一层用来保证队列不空,即能够遍历所有...原创 2020-04-20 15:25:10 · 263 阅读 · 0 评论 -
Leetcode110. 平衡二叉树(简单)DFS 递归法
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null...原创 2020-04-20 14:50:47 · 186 阅读 · 0 评论 -
Leetcode 559. N 叉树的最大深度(简单)C语言 递归法、DFS、BFS 三种解法
题目描述:给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个3叉树:我们应返回其最大深度,3。说明:树的深度不会超过1000。 树的节点总不会超过5000。思路:1、递归法/** * Definition for a Node. * struct Node { * ...原创 2020-04-18 11:22:37 · 384 阅读 · 0 评论 -
Leetcode 104. 二叉树的最大深度(简单) 递归思路
题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3思路:很好理解如果一棵二叉树,左子树深度为LD,右子树深度为...原创 2020-04-18 09:36:15 · 137 阅读 · 0 评论 -
Leetcode 101. 对称二叉树(简单)递归 和 迭代
题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:你可以运用递归和迭代...原创 2020-04-16 12:07:22 · 265 阅读 · 1 评论 -
Leetcode 100.相同的树 (简单) 递归
题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1...原创 2020-04-16 11:37:13 · 146 阅读 · 0 评论 -
Leetcode 239. 滑动窗口最大值(困难)
题目描述:给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: ...原创 2020-04-14 23:29:32 · 405 阅读 · 0 评论 -
Leetcode 503. 下一个更大元素 II
题目描述:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大...原创 2020-04-14 09:53:15 · 256 阅读 · 0 评论 -
Leetcode 144. 二叉树的前序遍历(中等) 递归法和非递归法
题目描述:给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:常规的递归和非递归,看代码即可。递归法/** * Definition for a binary tree node. * struct...原创 2020-04-11 18:04:31 · 200 阅读 · 0 评论 -
Leetcode 102. 二叉树的层序遍历(中等) 层次遍历
题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路:常规的层次遍历思路,建立一个队列(内存优化可以...原创 2020-04-10 22:44:20 · 191 阅读 · 0 评论 -
Leetcode 94. 二叉树的中序遍历(中等)递归与非递归(迭代)
题目描述:给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶:递归算法很简单,你可以通过迭代算法完成吗?思路:1、常规的中序递归法void traverse(TreeNode* root) { if(root != NULL) {...原创 2020-04-10 21:06:47 · 216 阅读 · 0 评论 -
Leetcode 437. 路径总和III (简单) 递归思想
题目描述:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], su...原创 2020-04-10 18:09:44 · 156 阅读 · 0 评论 -
Leetcode 72. 编辑距离(困难) 动态规划
题目描述:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')...原创 2020-04-09 10:12:17 · 188 阅读 · 0 评论 -
Leetcode 1405. 最长快乐字符串(中等) 贪心
题目描述:如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s: s 是一个尽可能长的快乐字符串。 s 中 最多 有a 个字母 'a'、b 个字母 'b'、c 个字母 'c' 。 s 中只含有 'a'、'b' 、'c' ...原创 2020-04-08 23:46:52 · 253 阅读 · 0 评论 -
Leetcode 1143. 最长公共子序列(中等) 动态规划
题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。...原创 2020-04-08 17:39:25 · 277 阅读 · 0 评论 -
leetcode 452. 用最少数量的箭引爆气球(中等)贪心算法
题目描述:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ ...原创 2020-04-08 11:36:08 · 199 阅读 · 0 评论 -
Leetcode 435. 无重叠区间(中等)贪心思想
题目描述:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: ...原创 2020-04-08 11:12:26 · 279 阅读 · 0 评论 -
Leetcode 42. 接雨水问题(困难)
题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(Leet...原创 2020-04-05 23:27:43 · 227 阅读 · 0 评论 -
Leetcode 1011. 在D天内送达包裹的能力 (中等) 二分法求左边界
题目描述:传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5...原创 2020-04-05 12:42:41 · 203 阅读 · 0 评论 -
Leetcode 875. 爱吃香蕉的珂珂(中等) 二分法求左边界
题目描述:珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。 珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H ...原创 2020-04-05 11:14:42 · 624 阅读 · 0 评论 -
Leetcode 3. 无重复字符的最长子串(中等)双指针(滑动窗口)
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的...原创 2020-04-03 17:48:15 · 249 阅读 · 0 评论 -
Leetcode 438. 找到字符串中所有字母异位词 (中等)双指针(滑动窗口)
题目描述:给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。示例 1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]...原创 2020-04-03 15:32:20 · 237 阅读 · 0 评论 -
Leetcode 76. 最小覆盖子串(困难)双指针中的滑动窗口技巧
题目描述:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)思路:使用双指...原创 2020-04-02 23:47:50 · 286 阅读 · 0 评论 -
Leetcode 416. 分割等和子集 (中等) 动态规划 01 背包的变体
题目描述:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: f...原创 2020-03-31 23:51:39 · 433 阅读 · 0 评论 -
Leetcode 518. 零钱兑换 II(中等) 动态规划
题目描述:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: ...原创 2020-03-26 23:33:14 · 221 阅读 · 0 评论 -
Leetcode 70. 爬楼梯 (简单) 动态规划
题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶...原创 2020-03-26 21:56:16 · 175 阅读 · 0 评论