LeetCode刷题
卜凡.
燕山大学软件工程系19级在读本科生
展开
-
136. 只出现一次的数字(C++|题解|源程序)
136. 只出现一次的数字(C++|题解|源程序)1.题解哈希表2.源码3.源程序1.题解哈希表C++中unordered_map可用作哈希表;若表中没有,就加入;若表中有了,就删除;最后表中就剩下一个元素就是。2.源码class Solution {public: int singleNumber(vector<int>& nums) { unordered_map<int, int> myMap; int cnt = 0, res =原创 2022-01-07 19:24:17 · 118 阅读 · 0 评论 -
143. 重排链表(C++|题解|源程序)
143. 重排链表(C++|题解|源程序)1.题解2.源码3.源程序1.题解思路很简单:首先,找到链表的中间节点;接着,将链表的后半部分反转;然后,将链表的前半部分和链表的后半部分反转后的结果进行合并。2.源码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr原创 2022-01-07 18:55:41 · 301 阅读 · 0 评论 -
148. 排序链表(C++题解含VS可运行源程序)(未完待续。。。。。)
148. 排序链表(C++题解含VS可运行源程序)1.题解1.1归并排序2.力扣C++源码3.VS可运行源程序1.题解1.1归并排序2.力扣C++源码3.VS可运行源程序先鸽着,学完归并排序等一系列排序再来做。。。。原创 2022-01-07 18:08:47 · 761 阅读 · 0 评论 -
83. 删除排序链表中的重复元素(C++题解含VS可运行源程序)
83. 删除排序链表中的重复元素(C++题解含VS可运行源程序)1.题解快慢指针2.力扣C++源码3.VS可运行源程序1.题解快慢指针很简单2.力扣C++源码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) :原创 2022-01-07 18:09:04 · 281 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II(C++题解含VS可运行源程序)
82. 删除排序链表中的重复元素 II(C++题解含VS可运行源程序)1.题解快慢指针2.力扣C++源码3.VS可运行源程序1.题解快慢指针关键要保存要删除结点的pre2.力扣C++源码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * Li原创 2022-01-05 21:56:23 · 106 阅读 · 0 评论 -
226. 翻转二叉树(C++题解含VS可运行源程序)
226. 翻转二叉树(C++题解含VS可运行源程序)1.题解递归2.力扣C++源码3.VS可运行源程序1.题解递归递归实现,很简单2.力扣C++源码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nu原创 2022-01-05 20:55:44 · 649 阅读 · 0 评论 -
169. 多数元素(C++题解含VS可运行源程序)
169. 多数元素(C++题解含VS可运行源程序)1.题解1.1排序1.2map/unordered_map1.3遍历统计更新2.力扣C++源码1.1排序1.2map/unordered_map1.3遍历统计更新3.VS可运行源程序1.题解1.1排序我们可以先排序,然后输出在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。nums[n / 2]eg:奇数:n=5,⌊ n/2 ⌋=2,所以出现次数为3、4、5次,排序后,第3个数肯定是多数元素;eg:偶数:n=6,⌊ n/2 ⌋=3,所以出现次数为4原创 2022-01-05 19:52:46 · 681 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点(C++题解含VS可运行源程序)
19. 删除链表的倒数第 N 个结点(C++题解含VS可运行源程序)1.题解快慢指针2.力扣C++源码3.VS可运行源程序1.题解快慢指针快指针先移动n步,然后两个指针同时移动当快指针到达最后一个节点后,慢指针到达要删除节点的前一个节点,然后就可以将倒数第n个节点删除如果快指针移动n步后为空,那么直接删除头节点2.力扣C++源码/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2022-01-04 21:40:05 · 156 阅读 · 0 评论 -
101. 对称二叉树(C++题解含VS可运行源程序)
101. 对称二叉树(C++题解含VS可运行源程序)1.题解1.1递归1.2迭代(队列)2.力扣C++源码1.1递归1.2迭代(队列)3.VS可运行源程序1.题解1.1递归该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:1.它们的两个根结点具有相同的值。2.每个树的右子树都与另一个树的左子树镜像对称。1.2迭代(队列)使用两个队列,将两个结点的左右子结点按相反的顺序插入队列中2.力扣C++源码1.1递归/** * Definition f原创 2022-01-03 21:39:54 · 478 阅读 · 0 评论 -
234. 回文链表(C++题解含VS可运行源程序)
234. 回文链表(C++题解含VS可运行源程序)1.题解快慢指针+反转链表2.力扣C++源码3.VS可运行源程序1.题解快慢指针+反转链表1.使用快慢指针找到链表的的中间节点,并反转链表的前半部分;2.然后进行比较pre.val(中间向前找)和slow.val(中间向后找),若不相等,返回false;否则继续比较,直到遍历结束。2.力扣C++源码/** * Definition for singly-linked list. * struct ListNode { * in原创 2022-01-03 21:12:35 · 145 阅读 · 0 评论 -
199. 二叉树的右视图(C++题解含VS可运行源程序)
199. 二叉树的右视图(C++题解含VS可运行源程序)1.题解层序遍历2.力扣C++源码3.VS可运行源程序1.题解层序遍历层次遍历,取每一层的最右值,就ok了。超级简单。2.力扣C++源码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0)原创 2022-01-03 20:05:36 · 492 阅读 · 0 评论 -
543. 二叉树的直径(C++题解含VS可运行源码)
543. 二叉树的直径(C++题解含VS可运行源码)1.题解递归2.力扣C++源码3.VS可运行源码1.题解递归利用递归,对每一个根节点,计算其左边的深度和右边的深度,左右深度相加即为当前子树的直径,遍历完每一棵子树后最大的那个直径即为二叉树的直径。maxd = max(Left + Right, maxd);//关键代码2.力扣C++源码/** * Definition for a binary tree node. * struct TreeNode { * int va原创 2022-01-02 21:41:31 · 730 阅读 · 0 评论 -
300. 最长递增子序列(C++题解含VS可运行源程序)
300. 最长递增子序列(C++题解含VS可运行源程序)1.题解动态规划2.力扣C++源码3.VS可运行源程序二级目录三级目录1.题解动态规划首先要定义 dp 数组的含义:dp[i] 表示以 nums[i] 这个数结尾的最长递增子序列的长度。eg:index012345nums143423dp12232?根据这个定义,我们的最终结果(子序列的最大长度)应该是 dp 数组中的最大值。求状态转移方程:根据刚才我们对 dp 数原创 2022-01-02 20:47:41 · 311 阅读 · 0 评论 -
54. 螺旋矩阵(C++题解含VS可运行源程序)
54. 螺旋矩阵(C++题解含VS可运行源程序)1.题解遍历2.力扣C++源码3.VS可运行源程序1.题解遍历按照输出顺序右->下->左->上进行遍历即可2.力扣C++源码class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { //按照顺序遍历即可 vector<int> ans;原创 2021-12-17 21:18:07 · 858 阅读 · 0 评论 -
155. 最小栈(C++题解含VS可运行源程序)
155. 最小栈(C++题解含VS可运行源程序)1.题解辅助栈2.力扣C++源码3.VS可运行源程序1.题解辅助栈使用辅助栈:两个辅助栈(一个数据栈,一个最小值栈)2.力扣C++源码class MinStack {public: MinStack() { } void push(int val) { s1.push(val); if (minS.empty() || minS.top() >= val) {原创 2021-12-16 21:45:55 · 879 阅读 · 0 评论 -
33. 搜索旋转排序数组(C++题解含VS可运行源程序)
33. 搜索旋转排序数组(C++题解含VS可运行源程序)1.题解2.力扣C++源码3.VS可运行源程序1.题解先利用二分法思想找出旋转下标;再利用二分法找出目标值。解释:只要是要求时间复杂度在log(n)的查找,一般你就用二分查找上面靠肯定没错啦,但是二分查找的数组必须是有序的;首先利用二分查找的思想找到旋转数组的旋转位置,这样这个位置两边的子数组就都是有序的了,然后根据这个位置的值得情况判断是在左边进行二分还是右边进行二分查找。2.力扣C++源码class Solution {原创 2021-12-16 20:25:08 · 814 阅读 · 0 评论 -
69. Sqrt(x)(C++题解版含VS可运行源程序)
69. Sqrt(x)(C++题解版含VS可运行源程序)1.题解1.1暴力1.2二分查找法2.力扣C++源码2.1暴力2.2二分法3.VS可运行源程序1.题解1.1暴力直接遍历,需要注意的是存储平方的值为long long。方法二也是遍历,不过检索的空间缩小了很多,因此速度也很快。1.2二分查找法对于一个非负数n,它的平方根不会大于(n/2+1);在[0, n/2+1]这个范围内可以进行二分搜索,求出n的平方根。2.力扣C++源码2.1暴力class Solution {pub原创 2021-12-16 17:31:31 · 101 阅读 · 0 评论 -
46. 全排列(C++题解含VS可运行源程序)
46. 全排列(C++题解含VS可运行源程序)1.题解回溯法2.力扣C++源码3.VS可运行源程序1.题解回溯法使用回溯算法,深度优先遍历+状态重置全排列的话,当前结点值的候选区间是:从根到当前结点这条路径中未使用过的,因此需要使用used数组将这条路径使用过的值作个标记。自然当前结点值的选择就是从0开始,所有未被标记过的都可以,如果作出了一个选择,就把这个增添到路径used中,下一层递归中就不会被重复选到了。并且对于同一层的后面结点,需要恢复现场,把选过的那个恢复为false原创 2021-12-16 17:27:23 · 129 阅读 · 0 评论 -
1. 两数之和(C++题解版含VS可运行源程序)
1. 两数之和(C++题解版含VS可运行源程序)1.题解方法:暴力2.力扣C++源码3.VS可运行源程序1.题解方法:暴力很简单,双层for循环遍历2.力扣C++源码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; for (int i = 0; i < nums.size(); i+原创 2021-12-12 18:41:43 · 863 阅读 · 0 评论 -
142. 环形链表 II(C题解版含VS可运行源程序)
142. 环形链表 II(C题解版含VS可运行源程序)1.题解快慢指针2.力扣C源码3.VS可运行源程序1.题解快慢指针设定一个快慢指针,慢指针每次往前走一格,快指针每次往前走2格如果快指针遇到null的话,则表示无环如果快指针和慢指针相等的话,则表示有环,剩下的就是找出环的起点的问题如下图所示,可以找出关系式所以在快慢指针相遇的时候,只需要重新找一个从头节点开始走的指针,让它和慢指针继续同步往前走,相等的时候即为环的起点,则可以返回2.力扣C源码/** * Definiti原创 2021-12-10 21:46:06 · 604 阅读 · 0 评论 -
110. 平衡二叉树(C++题解版含VS可运行源程序)
110. 平衡二叉树(C++题解版含VS可运行源程序)1.题解递归2.力扣C++源码3.VS可运行源程序1.题解递归计算左右子树深度,返回较大值,若左右子树高度差大于1,则此树不是平衡二叉树;递归判断左右子树是否平衡。2.力扣C++源码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2021-12-10 17:14:21 · 628 阅读 · 0 评论 -
92. 反转链表 II(C题解版含VS可运行源程序)
92. 反转链表 II(C题解版含VS可运行源程序)1.题解2.力扣C源码3.VS可运行源程序4.运行结果截图1.题解先设置虚拟头节点便于处理m=1的情况,然后找到第m个节点的前一位,反转m~n之间,注意最后还要把反转之后节点指向剩余的节点。2.力扣C源码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */原创 2021-12-07 19:27:56 · 664 阅读 · 1 评论 -
104. 二叉树的最大深度(C++题解含VS可运行源程序)
104. 二叉树的最大深度(C++题解含VS可运行源程序)1.题解1.方法一:DFS深度优先搜索(递归)2.方法二:BFS广度优先遍历2.力扣C++源码1.方法一:DFS深度优先搜索(递归)2.方法二:BFS广度优先遍历3.VS可运行源程序4.二叉树的创建说明5.运行结果截图1.题解1.方法一:DFS深度优先搜索(递归)二叉树的最大深度 = max(左子树深度 + 右子树深度) + 1只考虑根节点是否为空,其余交给递归处理2.方法二:BFS广度优先遍历广度优先遍历使用队列,树的节点逐层添加原创 2021-12-06 18:55:18 · 298 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点(C题解版含VS可运行源程序)
剑指 Offer 22. 链表中倒数第k个节点(C题解版含VS可运行源程序)1.力扣C源码1.方法一:遍历2.方法二:快慢指针2.题解1.方法一:遍历2.方法二:快慢指针3.VS可运行源程序1.力扣C源码1.方法一:遍历/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* getKt原创 2021-12-05 17:10:19 · 503 阅读 · 0 评论 -
704. 二分查找(C题解版含VS可运行源程序)
704. 二分查找(C题解版含VS可运行源程序)1.力扣C源码2.题解3.VS可运行源程序1.力扣C源码int search(int* nums, int numsSize, int target){ int left = 0; int right = numsSize - 1; while (left <= right) { int mid = (left + right) / 2; if (nums[mid] == target) { return mid; }原创 2021-12-05 17:09:06 · 192 阅读 · 0 评论 -
200. 岛屿数量(C++题解版含VS可运行源程序)
200. 岛屿数量(C题解版含VS可运行源程序)1.力扣C源码2.题解3.VS可运行源程序1.力扣C源码2.题解3.VS可运行源程序今天晚上学完图的知识后再来做。。。。。。。。原创 2021-12-05 17:08:07 · 368 阅读 · 0 评论 -
70. 爬楼梯(C++题解版含VS可运行源码)
70. 爬楼梯(C++题解版含VS可运行源码)1.力扣C++源码2.题解方法:动态规划3.VS可运行源码1.力扣C++源码2.题解方法:动态规划本题先鸽着,寒假系统学习动态规划3.VS可运行源码未完待续。。。。。。。。。。。...原创 2021-12-01 20:27:55 · 473 阅读 · 0 评论 -
5. 最长回文子串(C++题解版含VS可运行源码)
5. 最长回文子串(C++题解版含VS可运行源码)1.力扣C++源码2.题解方法:动态规划3.VS可运行源码1.力扣C++源码2.题解方法:动态规划本题先鸽着,寒假系统学习动态规划3.VS可运行源码未完待续。。。。。。。。。...原创 2021-12-01 20:06:40 · 412 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词(C++题解版含VS可运行源码)
滑动窗口,左右索引指针原创 2021-11-30 21:50:03 · 171 阅读 · 0 评论 -
94. 二叉树的中序遍历(C++题解版含VS可运行源码)
94. 二叉树的中序遍历(C++题解版含VS可运行源码)1.力扣C++源码2.题解3.VS可运行源码1.力扣C++源码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * T原创 2021-11-28 17:37:49 · 412 阅读 · 0 评论 -
102. 二叉树的层序遍历(C++题解版含VS可运行源码)
102. 二叉树的层序遍历(C++题解版含VS可运行源码)1.力扣C++源码2.题解3.VS可运行源码4.二叉树的创建说明1.力扣C++源码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr)原创 2021-11-28 17:01:43 · 556 阅读 · 0 评论 -
20. 有效的括号(C++题解版含VS可运行源码)
20. 有效的括号(C++题解版含VS可运行源码)1.力扣C++源码2.题解3.VS可运行源码1.力扣C++源码class Solution {public: bool isValid(string s) {stack<char> st; map<char, char> m; m['('] = ')'; m['['] = ']'; m['{'] = '}'; for (int i = 0; i < s.length(); i++) {原创 2021-11-26 22:22:28 · 295 阅读 · 0 评论 -
2. 两数相加(C题解版含VS可运行源码)
2. 两数相加(C题解版含VS可运行源码)1.力扣C源码2.题解3.VS可运行源码4.特别注意1.力扣C源码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){//新链表原创 2021-11-26 22:15:47 · 715 阅读 · 0 评论 -
21. 合并两个有序链表(C题解版含VS可运行源码)
21. 合并两个有序链表(C题解版含VS可运行源码)1.力扣C源码2.题解3.VS可运行源码1.力扣C源码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ st原创 2021-11-23 22:25:36 · 198 阅读 · 0 评论 -
141. 环形链表(C/C++题解含VS可运行源码)
141. 环形链表(C/C++题解含VS可运行源码)1.力扣C源码2.题解3.VS可运行源码1.力扣C源码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */bool hasCycle(struct ListNode *head) { if (head == NULL) { return fals原创 2021-11-22 22:11:31 · 757 阅读 · 0 评论 -
215. 数组中的第K个最大元素(C++题解含VS可运行源码)
215. 数组中的第K个最大元素(C++题解含VS可运行源码)1.力扣C++源码2.题解3.VS可运行源码1.力扣C++源码class Solution {public: int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(), nums.end()); int n = nums.size(); int ans = nums[n - k];原创 2021-11-20 18:50:30 · 510 阅读 · 0 评论 -
121. 买卖股票的最(佳)时机(C++题解含VS可运行源码)
121. 买卖股票的最佳时机(C++题解含VS可运行源码)1.力扣C++源码2.题解3.VS可运行源码1.力扣C++源码class Solution {public: int maxProfit(vector<int>& prices) { int maxprofit = 0;//最大利润设为0 int minprice = INT_MAX;//最低价格设为一个很大的数 for (int i = 0; i < price原创 2021-11-20 17:08:15 · 671 阅读 · 0 评论 -
53. 最大子序和(C++题解含VS可运行源码)
53. 最大子序和(C++题解含VS可运行源码)1.力扣C++源码2.题解(1)暴力-O(N^2)(双层for循环遍历)(2)扫描法-O(N)(3)动态规划-O(N)3.VS可运行源码1.力扣C++源码class Solution {public: int maxSubArray(vector<int>& nums) {int sum = nums[0]; int tempsum = nums[0]; for (int i = 1; i &原创 2021-11-20 16:04:28 · 380 阅读 · 0 评论 -
3. 无重复字符的最长子串(C++题解含VS可运行源码)
3. 无重复字符的最长子串(C++题解含VS可运行源码)1.力扣C++源码2.题解(1)解题思路:滑动窗口(2)方法一:滑动窗口(3)方法二:优化的滑动窗口3.VS可运行源码1.力扣C++源码class Solution {public: int lengthOfLongestSubstring(string s) { map<char, int> hash; int ans = 0; int i = 0; int n原创 2021-11-20 11:04:38 · 659 阅读 · 0 评论 -
15. 三数之和(C++题解版含VS可运行源码)
15. 三数之和(C++题解版含VS可运行源码)1.力扣C++源码2.题解3.VS可运行源码1.力扣C++源码class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int len = nums.size(); if (len < 3)return {};//特判1,数组元素<3,返回空数组 vect原创 2021-11-19 20:45:12 · 742 阅读 · 0 评论