自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 [C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。LeetCode网址:https://leetcode.com/LeetCode中文版:https://leetcode-cn.com/二.刷题指南LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点:题目全部来自业内大公司的真实面试不用处理输入输出精力全放在解决具体问题上题目有丰富的讨论可以参考别人的思路精确了解自己代码在所有提交代码中

2020-09-27 13:10:53 227

原创 [C++]Leetcode47.全排列 II

47.全排列 II题目:给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]class Solution {private: vector<vector<int>> result; void backtrack(vector<int>& nums, vector<int>& vec, vector<bool>&

2020-10-24 10:14:42 5

原创 [C++]Leetcode46.全排列

46.全排列题目:给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]class Solution {public: //回溯 void backtrack(vector<vector<int>>&res, vector<int>& nums, int first, int leng

2020-10-24 10:12:42 10

原创 [C++]Leetcode257.二叉树的所有路径

257. 二叉树的所有路径给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入:1/ 2 35输出: [“1->2->5”, “1->3”]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3class Solution {public: void construct_path(TreeNode* root, string path, vector<string

2020-10-24 10:10:34 12

原创 [C++]Leetcode79.单词搜索

79.单词搜索题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返

2020-10-22 11:38:51 6

原创 [C++]Leetcode93.复原IP地址

93.复原IP地址题目:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。示例 1:输入:s = “25525511135” 输出:[“255.25

2020-10-22 11:37:00 12

原创 [C++]Leetcode17. 电话号码的字母组合

17. 电话号码的字母组合题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。class Solution {public: vector<string> letterCom

2020-10-22 11:32:27 11

原创 [C++]Leetcode417.太平洋大西洋水流问题

417.太平洋大西洋水流问题题目:给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:给定下面的 5x5 矩阵:太平洋 ~ ~ ~ ~ ~~ 1 2 2 3

2020-10-22 11:30:01 10

原创 [C++]Leetcode130.被围绕的区域

130.被围绕的区域给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两

2020-10-22 11:27:21 11

原创 [C++]Leetcode547.朋友圈

547.朋友圈题目:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入:[[1,1,0],[1,1,0],[0,0,1]]输出:2解释:已知

2020-10-16 16:01:59 49

原创 [C++]Leetcode200.岛屿数量

200. 岛屿数量题目:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘0’,‘0’],[‘0’,‘0’,‘0’,‘0’,‘0’]]输出: 1示例 2:输入:[[‘1’,‘1’,‘0’,‘0

2020-10-16 15:59:53 18

原创 [C++]Leetcode695.岛屿的最大面积

695. 岛屿的最大面积**题目:**给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0

2020-10-16 15:56:54 47

原创 [C++]Leetcode127.单词接龙

127.单词接龙题目:给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 beginWord 和 endWord 是非空的,且二者不相同。

2020-10-13 12:50:36 23

原创 [C++]Leetcode279.完全平方数

279.完全平方数题目:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.class Solution {public: int numSquares(int n) { //每个数的最优解都存在res数组里 vecto

2020-10-13 12:44:20 13

原创 [C++]Leetcode1091.二进制矩阵中的最短路径

1091.二进制矩阵中的最短路径题目:在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1位于 (0, 0)(即,值为 grid[0][0] C_k位于 (N-1, N-1)(即,值为grid[N-1][N-1]) 如果 C_i 位于 (r, c)

2020-10-13 12:42:24 19

原创 [C++]Leetcode102. 二叉树的层序遍历

102. 二叉树的层序遍历题目:给你一个二叉树,请你返回其按层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7[[3],[9,20],[15,7]]class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) {

2020-10-13 12:38:08 12

原创 [C++]Leetcode95.不同的二叉搜索树 II

95.不同的二叉搜索树 II题目:给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ 3 2 1 1 3

2020-10-13 12:33:14 10

原创 [C++]Leetcode50. Pow(x, n)

50. Pow(x, n)题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000class Solution {public: double quickmul(double x, long long N) { if(N == 0) return 1.0; double y = quickmul(x ,N/2); return N%2 == 0 ? y*y

2020-10-12 21:32:53 15

原创 [C++]Leetcode153.寻找旋转排序数组中的最小值

153.寻找旋转排序数组中的最小值题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[4,5,6,7,0,1,2]输出: 0class Solution {public: int findMin(vector<int>& nums) {

2020-10-10 12:43:44 7

原创 [C++]Leetcode278. 第一个错误的版本

278. 第一个错误的版本题目:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2,…, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:

2020-10-10 12:40:54 7

原创 [C++]Leetcode540.有序数组中的单一元素

540.有序数组中的单一元素题目:给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1: 输入:[1,1,2,3,3,4,4,8,8] 输出: 2示例 2: 输入:[3,3,7,7,10,11,11] 输出: 10class Solution {public: int singleNonDuplicate(vector<int>& nums) { int l = 0; int r = n

2020-10-10 12:37:41 7

原创 [C++]Leetcode744.寻找比目标字母大的最小字母

744.寻找比目标字母大的最小字母题目:给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’示例:输入: letters = [“c”,“f”, “j”] target = “a”输出: “c”输入:letters = [“c”,“f”,

2020-10-08 20:27:53 23

原创 [C++]Leetcode69.X的平方根

69.X 的平方根题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1: 输入: 4 输出: 2示例 2: 输入: 8 输出: 2说明: 8 的平方根是2.82842…, 由于返回类型是整数,小数部分将被舍去。class Solution {public: int mySqrt(int x) { int left = 0, right =

2020-10-08 20:24:38 20

原创 [C++]Leetcode763.划分字母区间

763.划分字母区间题目:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1: 输入:S =“ababcbacadefegdehijhklij” 输出:[9,7,8]解释:划分结果为 “ababcbaca”,“defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。clas

2020-10-07 13:03:48 20

原创 [C++]Leetcode53.最大子序和

53.最大子序和题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例: 输入:[-2,1,-3,4,-1,2,1,-5,4] 输出: 6解释: 连续子数组[4,-1,2,1] 的和最大,为 6。class Solution {public: int maxSubArray(vector<int>& nums) { int pre = 0; int maxAns =

2020-10-07 13:01:25 10

原创 [C++]Leetcode392.判断子序列

392.判断子序列题目:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1: s = “abc”, t =“ahbgdc” 返回 true.示例 2: s = “axc

2020-10-07 12:59:11 31

原创 [C++]Leetcode605.种花问题

605.种花问题题目:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed= [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed= [1,0,0,0,1], n = 2输出

2020-10-07 12:55:24 19

原创 [C++]Leetcode122. 买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。for循环遍历,最大利润等于 当前价格 减 前一个价格与0取最大值的累加。class Solution {public: int maxProfit(vector<int>& prices) {

2020-10-07 11:30:17 12

原创 [C++]Leetcode121.买卖股票的最佳时机

121.买卖股票的最佳时机题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入:[7,1,5,3,6,4]输出:5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票

2020-10-05 19:25:06 15

原创 [C++]Leetcode406.根据身高重建队列

406.根据身高重建队列题目:假设有打乱顺序的一群人站成一个队列。每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例:输入: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]class Solution {public: vector<vec

2020-10-05 19:19:31 36

原创 [C++]Leetcode452.用最少数量的箭引爆气球

452.用最少数量的箭引爆气球题目:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以

2020-10-05 19:16:51 24

原创 [C++]Leetcode435.无重叠区间

435.无重叠区间题目:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2],[2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2],[1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入

2020-10-05 19:13:34 19

原创 [C++]Leetcode21.合并两个有序链表

21.合并两个有序链表题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4递归法:1.结点l1为空则返回l2;2.结点l2为空则返回l1;3.如果结点l1的值小于l2的值,l1的next指向下一次递归得到的结果,返回l14.如果结点l2的值小于l1的值,l2的next指向下一次递归得到的结果,返回l2

2020-10-04 17:12:40 17

原创 [C++]Leetcode445.两数相加II

445.两数相加II题目:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 71.定两个栈,链表不为空时将元素入栈。定义进位变量carry和头指针并初始化。2.当栈不为空或者进位不为零时进行循环。3

2020-10-04 17:10:46 10

原创 [C++]Leetcode234.回文链表

234.回文链表题目:请判断一个链表是否为回文链表。示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true思路:设置快慢指针进行移动,直至慢指针到达中间位置。接着定义三个指针curnode、nextnode、temp来进行链表反转。最后while循环在两段链表不为空时循环,判断每个位置的元素是否相等,并移动指针class Solution {public: bool isPalindrome(ListNo

2020-10-04 17:09:33 24

原创 [C++]Leetcode25.K 个一组翻转链表

25.K 个一组翻转链表题目:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变

2020-10-04 17:07:56 15

原创 [C++]Leetcode19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.1.设置哑结点dummyHead,并且哑结点的next指向头结点2.设置双指针p和q都指向哑结点;3.通过for循环将q移动n个结点4.当结点q不为空时,p和q同时向后移动5.q为空时,设置需要删除的节点delNode指向p

2020-10-04 17:06:48 11

原创 [C++]Leetcode83.删除排序链表中的重复元素

83.删除排序链表中的重复元素题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2思路:先判断头结点和其下一个结点是否为空,为空则返回头结点While循环为当前结点和其下一个结点不为空,两者值相同则删,不同指针后移class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(!head || !

2020-09-30 08:47:58 20

原创 [C++]Leetcode455.分发饼干

455.分发饼干题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj>= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1: 输入: [1,2,3],[1,1] 输出: 1解

2020-09-30 08:41:39 30

原创 [C++]Leetcode75.颜色分类

75.颜色分类题目:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意: 不能使用代码库中的排序函数来解决这道题。示例:输入:[2,0,2,1,1,0]输出:[0,0,1,1,2,2]class Solution {public: void sortColors(vector<int>& nums)

2020-09-29 10:45:31 114

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除