- 博客(122)
- 收藏
- 关注
原创 LeetCode 110. 平衡二叉树
LeetCode 110. 平衡二叉树题目题解代码题目题解自顶向下:判断左右子树的高度差和左右子树是否为平衡树自底向上:判断左右子树的高度差,进行剪枝操作代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr),
2021-08-15 11:20:32 2115 1
原创 LeetCode 797. 所有可能的路径
LeetCode 797. 所有可能的路径题目题解代码题目题解此题用dfs比较有优势,可以找出所有路径dfs+回溯代码class Solution {public: void dfs(vector<vector<int>>& graph,int i,vector<int>& ans,vector<vector<int>>& res){ int n=graph.size();
2021-08-15 11:15:22 227
原创 LeetCode 130. 被围绕的区域
LeetCode 130. 被围绕的区域题目题解代码题目题解题意:与边界相连的‘O’不进行填充,内部的‘O’进行填充可以将边界以及相连的‘O’找出,并替换为其他字母,最后统一进行改变代码// class Solution {// public:// int xx[4]={0,0,1,-1};// int yy[4]={1,-1,0,0};// void solve(vector<vector<char>>& board) {
2021-08-14 17:40:34 176
原创 LeetCode 1091. 二进制矩阵中的最短路径
LeetCode 1091. 二进制矩阵中的最短路径题目题解代码题目题解最短路径一般考虑用广度优先遍历深度优先遍历考虑所有的情况,对值进行更新,时间复杂度高考虑dfs的基础原理,规范代码书写,对于矩阵上下左右,或者8邻域的遍历可采取for循环形式;此外,此题中res++与res+1的含义进行反思代码// class Solution {// public:// int min_res=1000000000;//1e9// int xx[8]={1,-1,1,-1,1
2021-08-14 17:35:58 323
原创 LeetCode 572. 另一棵树的子树
LeetCode 572. 另一棵树的子树题目题解代码题目题解注意是所有后代节点不是包含关系代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNo
2021-08-13 13:43:39 88
原创 LeetCode 117. 填充每个节点的下一个右侧节点指针 II
LeetCode 117. 填充每个节点的下一个右侧节点指针 II题目题解代码题目题解二叉树层次遍历用变量n记录队列的长度代码/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(i
2021-08-13 13:43:11 69
原创 LeetCode 547. 省份数量
LeetCode 547. 省份数量题目题解代码题目题解图联通问题相当于一维的数组来存储各个点而二维数组每行代表对应点与其他点之间的关系代码class Solution {public: int findCircleNum(vector<vector<int>>& isConnected) { int m=isConnected.size(); int n=isConnected[0].size();
2021-08-12 12:48:50 65
原创 LeetCode 200. 岛屿数量
LeetCode 200. 岛屿数量题目题解代码题目题解深度优先+递归广度优先+队列代码// class Solution {// public:// void dfs(vector<vector<char>>& grid,int i,int j){// int m=grid.size();// int n=grid[0].size();// grid[i][j]='0';//
2021-08-12 12:48:35 69
原创 LeetCode 209. 长度最小的子数组
LeetCode 209. 长度最小的子数组题目题解代码题目题解滑动窗口前缀和递增与 LeetCode 713. 乘积小于K的子数组 相似代码class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int n=nums.size(); if(n==0) return 0; int l=0; int
2021-08-11 14:21:57 76
原创 LeetCode 713. 乘积小于K的子数组
LeetCode 713. 乘积小于K的子数组题目题解代码题目题解不固定的滑动窗口,由l,r确定窗口的大小本题有这样一个规律:窗口内每加入一个数,如果乘积仍然小于k,则满足条件的子数组数量 += 窗口内元素数量前缀积递增与 LeetCode 209. 长度最小的子数组 相似代码class Solution {public: int numSubarrayProductLessThanK(vector<int>& nums, int k) {
2021-08-11 14:21:31 84
原创 438. 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词题目题解代码题目题解固定的滑动窗口遇到字母,考虑26位的数组,通过scnt==pcnt判断,两个字符串是否含有相同的字母进一位,出一位的思想代码class Solution{public: vector<int> findAnagrams(string s, string p){ int m=s.size(); int n=p.size(); vector<int> re
2021-08-11 14:20:31 66
原创 LeetCode 11. 盛最多水的容器
LeetCode 11. 盛最多水的容器题目题解代码题目题解从两端开始遍历容纳的水量=两个指针指向的数字中较小值∗指针之间的距离短板向内缩进,如果长板向内缩进只会不变或者减小相对于暴力枚举,贪心算法指,所有的消去状态都不会导致丢失面积最大值 。代码class Solution {public://最高与次高距离 int maxArea(vector<int>& height) { int l=0,r=height.size()-1;
2021-08-10 12:27:58 72
原创 LeetCode 986. 区间列表的交集
LeetCode 986. 区间列表的交集题目题解代码题目题解考虑清楚每组跳到下一个区间的条件是什么成为区间的start,end的条件是什么代码class Solution {public: vector<vector<int>> intervalIntersection(vector<vector<int>>& firstList, vector<vector<int>>& secondLi
2021-08-10 12:27:40 85
原创 LeetCode 844. 比较含退格的字符串
LeetCode 844. 比较含退格的字符串题目题解代码题目题解栈string 可以模拟栈的操作双指针从string尾数进行判断代码// class Solution {// public:// bool backspaceCompare(string S, string T) {// int i = S.length() - 1, j = T.length() - 1;// int skipS = 0, skipT = 0;//
2021-08-09 12:10:32 61
原创 LeetCode 82. 删除排序链表中的重复元素 II
LeetCode 82. 删除排序链表中的重复元素 II题目题解代码题目题解双指针,注意对待重复出现和未重复出现的元素,处理是不同的代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x),
2021-08-09 12:10:14 54
原创 LeetCode 162. 寻找峰值
LeetCode 162. 寻找峰值题目题解代码题目题解只需找到大于后面一位元素的位置即可将数组中的任何给定序列视为交替的升序和降序序列。代码// class Solution {// public:// int findPeakElement(vector<int>& nums) {// for (int i = 0; i < nums.size() - 1; i++) {// if (nums[i] &
2021-08-08 11:53:42 80
原创 LeetCode 153. 寻找旋转排序数组中的最小值
LeetCode 153. 寻找旋转排序数组中的最小值题目题解代码题目题解关于旋转数组的二分查找可以通过nums[mid]与首或者尾元素进行比较代码class Solution {public: int findMin(vector<int>& nums) { int l=0,r=nums.size()-1; int res=nums[0]; while(l<=r){ int mid
2021-08-08 11:53:29 56
原创 LeetCode 74. 搜索二维矩阵
LeetCode 74. 搜索二维矩阵题目题解代码题目题解二分查找代码class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); int n=matrix[0].size(); for(int i=0;i<min(m,n);i++){
2021-08-07 22:32:12 65
原创 LeetCode 33. 搜索旋转排序数组
LeetCode 33. 搜索旋转排序数组题目题解代码题目题解通过末尾进行二分查找,不属于严格意义的二分查找代码class Solution {public: int search(vector<int>& nums, int target) { int n=nums.size(); if(!n) return -1; if(nums[n-1]==target) return n-1;
2021-08-07 22:31:57 60
原创 LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置题目题解代码题目题解二分查找,找到后,再往前往后找到第一个和最后一个代码class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int n=nums.size(); if(!n) return {-1,-1}; int l=0,r=
2021-08-07 22:31:41 63
原创 LeetCode 409. 最长回文串
LeetCode 409. 最长回文串题目题解代码题目题解用哈希表存放字母元素出现的次数,偶数直接放入,奇数取出一位作为中心代码class Solution {public: int longestPalindrome(string s) { unordered_map<char,int> haxi; int flag=0; for(int i=0;i<s.size();i++) haxi[s
2021-08-06 13:01:41 59
原创 LeetCode 415. 字符串相加
LeetCode 415. 字符串相加题目题解代码题目题解模拟竖式加法下标为负数补0代码class Solution {public: string addStrings(string num1, string num2) { int i=num1.size()-1; int j=num2.size()-1; int add=0; string res; while(i>=0||j>=0|
2021-08-06 13:01:17 62
原创 LeetCode 560. 和为K的子数组
LeetCode 560. 和为K的子数组题目题解代码题目题解前缀和 两种不同叠加顺序前缀和优化,利用哈希表若[j…i]区间和为k,则sum[j-1]=sum[i]-k每当计算到位置i的前缀和,查找前面是否有sum[i]-k的前缀和https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/he-wei-kde-zi-shu-zu-by-leetcode-solution/代码// class Solution
2021-08-05 12:59:58 82
原创 LeetCode 238. 除自身以外数组的乘积
LeetCode 238. 除自身以外数组的乘积题目题解代码题目题解用除法考虑除0问题以及多个0的问题除自身以外数组的乘积=左边的积*右边的积先把对应的左边的积和右边的积分别存在两个数组中,直接取用即可为了减小空间复杂度,直接用结果数组存储左边的积,右边的积在计算结果的过程中直接乘上去代码// class Solution {// public:// vector<int> productExceptSelf(vector<int>& nu
2021-08-05 12:59:38 53
原创 LeetCode 334. 递增的三元子序列
LeetCode 334. 递增的三元子序列题目题解代码题目题解不一定连续二指针贪心算法设立small ,mid 指针代码class Solution {public: bool increasingTriplet(vector<int>& nums) { int n = nums.size(); if(n<3) return false; int small = INT_MAX, mid = INT_M
2021-08-05 12:59:03 70
原创 LeetCode 435. 无重叠区间
LeetCode 435. 无重叠区间题目题解代码题目题解题目的要求等价于「选出最多数量的区间,使得它们互不重叠」会出现,一个大区间包含多个小区间的情况动态规划动规五部曲:确定dp数组以及下标的含义:代表以第i个区间为最后一个区间,最多有多少个区间确定递推公式:dp[i] = max(dp[i], dp[j]+1);dp数组初始化:dp[0]=1;贪心算法代码// class Solution {// public:// int eraseOverlapIn
2021-08-04 13:45:12 58
原创 LeetCode 240. 搜索二维矩阵 II
LeetCode 240. 搜索二维矩阵 II题目题解代码题目题解从右上角开始遍历——找规律二分查找,分别查找行和列代码// class Solution {// public:// bool searchMatrix(vector<vector<int>>& matrix, int target) {// if(matrix.size()==0)// return false;//
2021-08-04 13:44:44 74
原创 LeetCode 59. 螺旋矩阵 II
LeetCode 59. 螺旋矩阵 II题目题解代码题目题解对于矩阵数组的操作找规律模拟代码// //遍历1-n*n// class Solution {// public:// vector<vector<int>> generateMatrix(int n) {// int curNum = 1;// vector<vector<int>> matrix(n, vector<int
2021-08-03 13:36:45 98
原创 LeetCode 48. 旋转图像
LeetCode 48. 旋转图像题目题解代码题目题解找规律:对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。matrix[col][n−row−1]=matrix[row][col]因为旋转90度,图像中的四位互相交换位置,获得新的图像旋转=水平翻转+对角线翻转代码// class Solution {// public:// void rotate(vector<vector<int>>&
2021-08-03 13:36:28 68
原创 LeetCode 119. 杨辉三角 II
LeetCode 119. 杨辉三角 II题目题解代码题目题解row[j]=res[i-1][j-1]+res[i-1][j];代码class Solution {public: vector<int> getRow(int rowIndex) { vector<vector<int>> res(rowIndex+1); for(int i=0;i<=rowIndex;i++){ vecto
2021-08-03 13:36:09 52
原创 LeetCode 706. 设计哈希映射
LeetCode 706. 设计哈希映射题目题解代码题目题解开放定址法,线性探测代码class MyHashMap {private: const static int N = 20011; vector<pair<int, int>> hashTable;public: /** Initialize your data structure here. */ MyHashMap() { hashTable = vect
2021-08-02 13:09:46 80
原创 LeetCode 56. 合并区间
LeetCode 56. 合并区间题目题解代码题目题解先按每对左区间进行排序,后将区间遍历进最终的数组,比较最终结果的最后一个区间的右区间与排序中左区间的大小关系代码class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int n=intervals.size(); if(n==0)
2021-08-02 13:07:54 66
原创 LeetCode 75. 颜色分类
LeetCode 75. 颜色分类题目题解代码题目题解双指针,0往前放,2往后放代码class Solution {public: void sortColors(vector<int>& nums) { //sort(nums.begin(),nums.end()); int n=nums.size(); int p=0; int q=n-1; for(int i=0;i<=q;
2021-08-02 13:04:03 65
原创 LeetCode 15. 三数之和
LeetCode 15. 三数之和题目题解代码题目题解代码class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; if(nums.size()<3) return res; sort(nums.begi
2021-08-01 12:09:36 50
原创 LeetCode 169. 多数元素
LeetCode 169. 多数元素题目题解代码题目题解先排序,后找出中间的数代码class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); return nums[nums.size()/2]; }};...
2021-08-01 12:09:03 58
原创 LeetCode 235. 二叉搜索树的最近公共祖先
LeetCode 235. 二叉搜索树的最近公共祖先题目题解代码题目题解利用BST的特点进行二叉搜索代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
2021-07-31 12:51:36 67
原创 LeetCode 653. 两数之和 IV - 输入 BST
LeetCode 653. 两数之和 IV - 输入 BST题目题解代码题目题解广度优先遍历+哈希表代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tr
2021-07-31 12:51:07 63
原创 LeetCode 98. 验证二叉搜索树
LeetCode 98. 验证二叉搜索树题目题解代码题目题解递归设立lower,upper两个临界值,来判断该节点位置是否正确中序遍历BST根据其性质,中序遍历获得的数组应单调增代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0),
2021-07-31 12:50:07 72
原创 LeetCode 701. 二叉搜索树中的插入操作
LeetCode 701. 二叉搜索树中的插入操作题目题解代码题目题解注意空树代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)
2021-07-30 12:02:04 45
原创 LeetCode 700. 二叉搜索树中的搜索
LeetCode 700. 二叉搜索树中的搜索题目题解代码题目题解二叉搜索树的特点节点的左孩子都比他小,右孩子都比他大代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {}
2021-07-30 12:01:42 62
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人