自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [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 128

原创 [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 197

原创 [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 223

原创 [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 467

原创 [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 551

原创 [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 472

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

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

2020-10-22 11:30:01 279

原创 [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 476

原创 [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 732

原创 [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 304

原创 [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 787

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

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

2020-10-13 12:50:36 389 1

原创 [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 442

原创 [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 553

原创 [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 368

原创 [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 347

原创 [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 352 1

原创 [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 251 1

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

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

2020-10-10 12:40:54 211

原创 [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 291

原创 [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 478

原创 [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 585 1

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

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

2020-10-07 13:03:48 297

原创 [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 163

原创 [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 397

原创 [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 343

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

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

2020-10-07 11:30:17 257

原创 [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 321

原创 [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 470

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

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

2020-10-05 19:16:51 614

原创 [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 842

原创 [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 270

原创 [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 277

原创 [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 256

原创 [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 264

原创 [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 248

空空如也

空空如也

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

TA关注的人

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