自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode - 203. 移除链表元素

203. 移除链表元素删除链表中等于给定值 val 的所有节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class ...

2020-03-31 22:32:05 67

原创 LeetCode - 234. 回文链表

234. 回文链表请判断一个链表是否为回文链表。解题思路: 先用快慢指针找到链表的中间节点,然后将链表断开,将后半段倒序,然后再判断是否为回文。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x)...

2020-03-31 22:26:59 67

原创 LeetCode - 1290. 二进制链表转整数

1290. 二进制链表转整数给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *...

2020-03-31 22:02:39 237

原创 LeetCode - 70. 爬楼梯

70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意: 给定 n 是一个正整数。解题思路: 本题考查动态规划,dp[i]=dp[i-1]+dp[i-2].// 动态规划解题,Space: O(1), time:O(n)class Solution {public: int climbStair...

2020-03-31 16:35:04 110

原创 LeetCode - 378. 有序矩阵中第K小的元素

378. 有序矩阵中第K小的元素给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。解题思路: 本题可以转化为TOP-k的问题。算法的时间复杂度为O(M∗N∗logk)O(M*N*logk)O(M∗N∗logk)class Solution {public: int kthSmallest(vec...

2020-03-30 21:15:39 189

原创 LeetCode - 445. 两数相加 II

445. 两数相加 II给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。解题思路: 先将链表倒置,然后就转化到从低位向高位相加的题目了。/** * Definition ...

2020-03-30 19:03:56 124

原创 LeetCode - 52. N皇后 II

52. N皇后 IIn 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回 n 皇后不同的解决方案的数量。...

2020-03-30 17:18:49 114

原创 LeetCode - 面试题62. 圆圈中最后剩下的数字

面试题62. 圆圈中最后剩下的数字0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。解题思路: 这是《剑指offer》书上的原题,书上的解法一采取的是用双链表模拟约瑟夫环,但是此算...

2020-03-30 17:16:09 183

原创 LeetCode - 230. 二叉搜索树中第K小的元素

230. 二叉搜索树中第K小的元素给定一个二叉搜索树,编写一个函数kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。解题思路: 本题考查二叉树的中序遍历。/** * Definition for a binary tree node. * struct TreeNode { * int val;...

2020-03-29 13:02:37 127

原创 LeetCode - 240. 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。解题思路: 这题是《剑指offer》书上的原题。从右上角往左下角搜索,当当前值大于target时,左移,当当前值小于target时,下移。class Solution {public: bool searchMa...

2020-03-29 12:56:40 141

原创 LeetCode - 275. H指数 II

275. H指数 II给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"解题思路:...

2020-03-29 12:45:36 147

原创 LeetCode题目集合

LeetCode - 50. Pow(x, n)LeetCode - 51. N皇后( 深度优先遍历)LeetCode - 82. 删除排序链表中的重复元素 IILeetCode - 86. 分隔链表LeetCode - 130. 被围绕的区域LeetCode - 138. 复制带随机指针的链表LeetCode - 142. 环形链表 IILeetCode - 147. 对链表进行插...

2020-03-29 12:22:41 130

原创 LeetCode - 328. 奇偶链表

328. 奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。解题思路: 将源链表节点依次摘取下来按照奇偶数放在两个链表上,然后将两个链表拼在一起即可。/** * Definit...

2020-03-29 10:40:21 323

原创 LeetCode - 287. 寻找重复数

287. 寻找重复数给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。解题思路:...

2020-03-29 10:17:29 167

原创 LeetCode - 222. 完全二叉树的节点个数

222. 完全二叉树的节点个数给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 [1,2h][1,2^h][1,2h] 个节点。解题思路: 如果按照普通的树处理,则可以通过递归求树的节点个数解题。/** * De...

2020-03-28 20:01:50 134

原创 LeetCode - 209. 长度最小的子数组(滑动窗口)

209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。解题思路: 此题考查滑动窗口。解滑动窗口的题有一个基本的套路,即每次让右边界向窗口中添加一个值,然后判断是否达到了条件,若达到条件,则尝试这缩小窗口看是否能依然能达到条件,i.e.,右移左边界,在边界移动的过程中选取最佳...

2020-03-28 19:17:26 156

原创 LeetCode - 162. 寻找峰值

162. 寻找峰值峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。解题思路: 题目规定了时间复杂度为O(logn)O(logn)O(logn),因此此题需要用二分查找解题。...

2020-03-28 18:51:56 158

原创 LeetCode - 51. N皇后( 深度优先遍历)

51. N皇后( 深度优先遍历)n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。解题思路: 本题参考了Grandyang的博客,采用DFS去枚...

2020-03-28 17:23:06 179

原创 LeetCode - 820. 单词的压缩编码

给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进行编码的...

2020-03-28 10:15:39 317

原创 LeetCode - 153. 寻找旋转排序数组中的最小值(二分查找)

153. 寻找旋转排序数组中的最小值假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。解题思路: 此题考查二分查找,解题的关键是在得到中点后,要判断中点位于第一个升序列还是位于第二个升序列,然后确定left和right的缩进。clas...

2020-03-27 22:23:52 131

原创 LeetCode - 147. 对链表进行插入排序(插入排序)

插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为...

2020-03-27 22:04:37 233

原创 LeetCode - 148. 排序链表

148. 排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。解题思路: 此题考查归并排序,即使题目不给定时间复杂度的限制,其实也应该用归并排序解题,归并排序最适合解决链表排序的问题。而恰好归并排序的时间复杂度为O(nlogn)O(nlogn)O(nlogn)。下面阐述一下解题思路,先用快慢指针找到链表的中位点,将链表断开,然后对两端链表分别排序,然后再合并两个...

2020-03-27 21:49:25 99

原创 LeetCode - 142. 环形链表 II

142. 环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。**说明:**不允许修改给定的链表。解题思路: 此题是《剑指offer》书上的题,本题是考察链表是否有环的升级版。可以先用快慢指针判断是否有环,...

2020-03-27 21:05:52 87

原创 LeetCode - 138. 复制带随机指针的链表

138. 复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1)...

2020-03-27 20:37:40 190

原创 LeetCode - 914. 卡牌分组

914. 卡牌分组给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。解题思路: 此题本质上在考察多个数的最大公约数,这个最大公约数即是本题要求的X值。由于解法1中可能存在大量冗余公约数的计算,因此用一个记忆数组保...

2020-03-27 19:54:40 99

原创 LeetCode - 417. 太平洋大西洋水流问题

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

2020-03-27 19:32:27 230

原创 LeetCode - 130. 被围绕的区域

130. 被围绕的区域给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。解题思路: 从边上的’O’开始DFS,将搜索到的‘O’换个记号,搜索完毕后,剩余的‘O’即为需要用‘X’填充的‘O’。class Solution {public: void helper(vector<vecto...

2020-03-26 22:36:41 220

原创 LeetCode - 82. 删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。解题思路: 找重复的节点,若找到,则直接跳过,否则跳到下一个节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;...

2020-03-26 21:36:48 142

原创 LeetCode - 86. 分隔链表

86. 分隔链表给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。解题思路: 在遍历链表的过程中,可以将小于x的节点放在一个链表上,将大于或等于x的节点放在另一个链表上,然后将这两个链表拼起来即可。/** * Definition for singly-linked list. * str...

2020-03-26 21:19:10 124

原创 LeetCode - 50. Pow(x, n)

50. Pow(x, n)实现 pow(x,n) ,即计算 x 的 n 次幂函数。解题思路: 此题属于实现基本的函数库的函数,这类型题在面试的过程中会非常常见,除了此题,还有比如实现stoi()函数。由于此题n的值非常大,因此不能用O(n)O(n)O(n)的时间复杂度解题。本质上此题在考察快速幂的解法。数学上我们有下面推论:a2n+1=an∗an∗aa^{2n+1} = a^n*a^n*a...

2020-03-26 21:04:49 148

原创 LeetCode - 34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。解题思路: 本题考查二分查找,找到一个target后向两端线性扩展即可找出其他的重复值。class Solution {pu...

2020-03-26 20:05:23 104

原创 LeetCode - 92. 反转链表 II

92. 反转链表 II反转从位置 m 到 n 的链表。请使用一趟扫描完成反转说明:1 ≤ m ≤ n ≤ 链表长度。解题思路: 解此题的关键是如何将链表翻转,一般情况下,链表反转有两种方法:头插法和顺次反转。这里把两种解法都贴出来。头插法/** * Definition for singly-linked list. * struct ListNode { * in...

2020-03-26 19:27:48 120

原创 LeetCode - 33. 搜索旋转排序数组

33. 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。解题思路: 题目要求了时间复杂度为O(logn)...

2020-03-26 18:29:18 65

原创 LeetCode - 61. 旋转链表

61. 旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。解题思路: 如果说本题保证k小于链表的长度,那么我们可以通过一次遍历即可解题,但是这里的k有可能会大于链表长度,因此需要先求出链表长度,然后取余,最后就是常规操作啦。断开链表,重新拼接。/** * Definition for singly-linked list. * struct Lis...

2020-03-26 16:30:25 91

原创 LeetCode - 74. 搜索二维矩阵

74. 搜索二维矩阵编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。解题思路: 本题本质上还是在考察二分查找,二维数组本质上依然是一维数组,因此转换成熟知的一维数组的二分查找即可解题。请看代码。class Solution {public: bool searc...

2020-03-26 16:18:54 175

原创 LeetCode - 999. 车的可用捕获量

999. 车的可用捕获量在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相...

2020-03-26 10:13:03 109

原创 LeetCode - 3. 无重复字符的最长子串

3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。解题思路: 此题考查滑动窗口。注:滑动窗口解题的固定模式设题目要求的条件为f(x)f(x)f(x)维持左边界和右边界,然后每次移动一个单位的右边界,check一下条件f(x)f(x)f(x)是否满足,如果不满足的话,那一直移动左边界,直到条件满足位置。在左边界和右边界移动的过程中,即可记录题目要求的...

2020-03-26 09:45:55 54

原创 LeetCode - 19. 删除链表的倒数第N个节点

19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。解题思路: 此题考查双指针,属于比较经典的一类题。先让快指针移动n步,然后快指针和慢指针一起移动。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *ne...

2020-03-26 09:00:54 88

原创 LeetCode - 24. 两两交换链表中的节点

24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.解题思路: 这类题我可以把它归纳为链表的改变顺序题。注: 对于移动链表的节点题,最佳的方法是:将要移动的点先从链表上摘取下来,然后...

2020-03-26 08:53:52 98

原创 LeetCode - 29. 两数相除(位运算)

29. 两数相除给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2提示:被除数和除数均为 32 位有符号...

2020-03-25 22:54:10 269

空空如也

空空如也

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

TA关注的人

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