leetcode
leetcode
superkcl2022
这个作者很懒,什么都没留下…
展开
-
leetcode汇总
两数之和——————我的题解两数相加无重复字符的最长子串寻找两个正序数组的中位数最长回文子串Z 字形变换原创 2022-07-10 08:33:19 · 73 阅读 · 0 评论 -
leetcode【二分总结】
文章目录1. binary_serarch2.lower_bound1. binary_serarchl <= r因为 l = mid + 1 r = mid -1 永远不会死循环class Solution {public: int search(vector<int>& nums, int target) { int l = 0,r = nums.size()-1; while(l <= r){ i原创 2021-07-21 10:37:30 · 90 阅读 · 0 评论 -
leetcode 150. 逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2:输入: ["4", "13", "5", "/", "+"]输出:...原创 2021-03-05 11:23:11 · 161 阅读 · 0 评论 -
leetcode- 350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。 #include <iostream>#include <unordered_map>原创 2021-03-04 15:57:59 · 92 阅读 · 1 评论 -
leetcode-349两个数组的交集
349. 两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4] 说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。简单的set vector使用#include <set>#include <map>#include <原创 2021-03-04 11:43:51 · 55 阅读 · 2 评论 -
leetcode-1863. 找出所有子集的异或总和再求和-【位运算】【DFS】
文章目录DFS位运算DFSclass Solution {public: int sum = 0; int len; void dfs(int idx,int now_sum, vector<int>& nums){ if(idx == len ){ sum += now_sum; return; } dfs(idx+1,now_sum^nums[idx],nu原创 2021-05-19 22:03:19 · 173 阅读 · 0 评论 -
leetcode-505. 迷宫 II--【BFS】
文章目录C++ BFS 最短路径C++ BFS 最短路径求最短路径,并不是最短的步骤感觉吧所有的可能性都搜索了一下,效率低下class Solution {public: struct node{ int i,j,step; node(int ii,int jj,int stepp){ i = ii; j = jj; step = stepp; } };原创 2021-05-12 16:33:21 · 232 阅读 · 0 评论 -
leetcode-490. 迷宫-【DFS】【BFS】
文章目录解题思路代码java dfsc++ bfs输入:maze = [[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0],[1,1,0,1,1],[0,0,0,0,0]], start = [0,4], destination = [4,4]输出:true解释:一种可能的路径是 : 左 -> 下 -> 左 -> 下 -> 右 -> 下 -> 右。解题思路简单的dfs特殊的是,一般的dfs只能走一步,而这个走一步就必须走到头分别向四原创 2021-05-12 15:48:23 · 573 阅读 · 0 评论 -
leetcode-136. 只出现一次的数字 【位运算】
文章目录位运算 O(n) O(1)hash表 O(n) O(n)位运算 O(n) O(1)class Solution {public: int singleNumber(vector<int>& nums) { int ans = 0; for(int i = 0; i < nums.size(); i++){ ans ^= nums[i]; } return ans;原创 2021-05-12 11:43:36 · 70 阅读 · 0 评论 -
leetcode-121. 买卖股票的最佳时机--【单调栈】【dp】
文章目录C++ 单调栈 勉强过java 单调栈C++ O(N) 类似dpjava 版本C++ 单调栈 勉强过class Solution {public: int maxProfit(vector<int>& prices) { int len = prices.size(); deque<int> q; if(len == 1) return 0; int maxPrice原创 2021-05-12 10:34:27 · 213 阅读 · 0 评论 -
leetcode-45. 跳跃游戏 II--【BFS+剪枝】-【贪心】
文章目录BFS + 剪枝 勉强ACJAVA超时BFS + 剪枝 勉强ACclass Solution {public: //BFS+剪枝 int jump(vector<int>& nums) { int len = nums.size(); queue<pair<int,int>> q; // pair<index,step> q.push(make_pair(0,0));原创 2021-05-11 18:40:24 · 99 阅读 · 0 评论 -
leetcode-55. 跳跃游戏--【DFS】【贪心】
文章目录C++ dfs+剪枝,超时,卡在最后一个样例,优化一下勉强过优化勉强过C++ 贪心java 贪心C++ dfs+剪枝,超时,卡在最后一个样例,优化一下勉强过class Solution {public: bool vis[30011]; bool isok = false; void dfs(int i,vector<int>& nums){ int len = nums.size(); if(isok) retu原创 2021-05-11 17:15:00 · 112 阅读 · 3 评论 -
leetcode-1849. 将字符串拆分为递减的连续值--【DFS】
文章目录c++ dfsjava DFSc++ dfsclass Solution {public: typedef unsigned long long LL; LL charToInt(string s){ int len = s.length(); LL res = 0; for(LL i = 0; i < len; i++){ res = res * 10; res += s[原创 2021-05-11 15:03:14 · 127 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找 【二分】
文章目录二分 nlog(n)O(m+n)二分 nlog(n)class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int r = matrix.size(); int c = 0; if(matrix.size() == 0) return false; if(matr原创 2021-05-11 11:00:21 · 59 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
文章目录C++ O(N) + O(N)C++ O(N) + O(1)C++ O(N) + O(N)使用map也是同样的道理class Solution {public: //O(n) + O(n) int findRepeatNumber(vector<int>& nums) { int len = nums.size(); int ans = 0; int cnt[100011] = {0};// memset原创 2021-05-11 10:11:45 · 36 阅读 · 0 评论 -
leetcode-53. 最大子序和--【数组】【动态规划】
文章目录class Solution { public int maxSubArray(int[] nums) { int len = nums.length; int sum = 0; int ans = nums[0]; for(int i = 0; i < len; i++){ sum += nums[i]; ans = Math.max(ans,sum);原创 2021-05-11 08:31:47 · 45 阅读 · 0 评论 -
leetcode-1856. 子数组最小乘积的最大值--【单调栈】【前缀和】
文章目录以最小值为切入点,左右指针分别查找,O(n2)超时以最小值为切入点,左右指针分别查找,O(n2)超时class Solution {public: typedef long long LL; int maxSumMinProduct(vector<int>& nums) { int mod = 1e9+7; int len = nums.size(); vector<LL> vec(len原创 2021-05-10 22:01:31 · 116 阅读 · 0 评论 -
leetcode-84. 柱状图中最大的矩形--【单调栈】
文章目录c++JAVAc++class Solution {public: int largestRectangleArea(vector<int>& heights) { int len = heights.size(); stack<int> st; int maxArea = 0; for(int i = 0; i < len; i++){ while(!s原创 2021-05-10 18:35:41 · 54 阅读 · 0 评论 -
leetcode-503. 下一个更大元素 II--【变异单调栈】
文章目录把原数组,拼接为两倍长, 太麻烦另解2把原数组,拼接为两倍长, 太麻烦标记入栈的,位置,当入栈的元素idx < len是原数组是,才放进map中class Solution {public: vector<int> nextGreaterElements(vector<int>& nums) { int len = nums.size(); //当前值 + 下标 stack<pair<原创 2021-05-10 15:49:53 · 50 阅读 · 0 评论 -
leetcode-496. 下一个更大元素 I 【单调栈】
文章目录暴力解法单调栈C++java暴力解法class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { vector<int> vec; int l1 = nums1.size(),l2 = nums2.size(); for(int i = 0原创 2021-05-10 10:57:18 · 115 阅读 · 0 评论 -
leetcode-104. 二叉树的最大深度--【DFS】【BFS】
文章目录C++ dfsjava dfsc++ dfsjava bfsC++ dfsclass Solution {public: int maxDepth(TreeNode* root) { if(root == NULL) return 0; return max(maxDepth(root->left),maxDepth(root->right)) + 1; }};java dfsclass Solution { pu原创 2021-05-08 16:58:20 · 55 阅读 · 0 评论 -
leetcode-1855. 下标对中的最大距离--【二分】
文章目录C++ 夹带二分java 二分解法2C++JAVAC++ 夹带二分nlog(n)class Solution {public: int maxDistance(vector<int>& nums1, vector<int>& nums2) { int len1 = nums1.size(); int len2 = nums2.size(); //找当前值比某一个数大,但是这个数尽量最大原创 2021-05-10 09:00:02 · 177 阅读 · 0 评论 -
leetcode-34. 在排序数组中查找元素的第一个和最后一个位置--【变异二分】
文章目录c++javac++class Solution {public: int my_lower_bound(vector<int>& nums,int target){ int len = nums.size(); int l = 0,r = len-1; int lower_idx = len; while(l <= r){ int mid = l + (r-l)/2;原创 2021-05-09 17:55:51 · 49 阅读 · 0 评论 -
leetcode-33. 搜索旋转排序数组--【变异二分】
文章目录遍历 O(n)java 二分 lognC++ log(N)遍历 O(n)java 二分 lognclass Solution { //数组里面的数互不相同 public int search(int[] nums, int target) { int len = nums.length; int l = 0,r = len-1; if(len == 1){ if(target == nums[0]) r原创 2021-05-09 17:26:03 · 64 阅读 · 0 评论 -
leetcode-4. 寻找两个正序数组的中位数
文章目录C++C++class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { vector<int> vec; int len1 = nums1.size(); int len2 = nums2.size(); int idx1 = 0,idx2原创 2021-05-09 16:17:03 · 41 阅读 · 0 评论 -
leetcode-200-岛屿数量--【DFS】
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:输入:grid = [ [".原创 2021-05-06 11:50:33 · 53 阅读 · 0 评论 -
leetcode-35. 搜索插入位置--手撕lower_bound()
文章目录C++JavaC++class Solution {public: int searchInsert(vector<int>& nums, int target) { int len = nums.size(); int l = 0,r = len-1; int idx = len; while(l <= r){ int mid = l+(r-l)/2;原创 2021-05-09 15:16:18 · 79 阅读 · 0 评论 -
leetcode-704. 二分查找
文章目录C++ binary_serarch()C++ 手写二分JAVA 手撕C++ binary_serarch()class Solution {public: int search(vector<int>& nums, int target) { int size = nums.size(); //二分查找,查找成功返回1,查找失败返回0 if(binary_search(nums.begin(),nums.end原创 2021-05-09 14:11:56 · 74 阅读 · 0 评论 -
leetcode-252. 会议室--Comparator--cmp
文章目录C++JAVAC++class Solution {public: //按照开始时间排序,如果前一个的结束时间 > 后一个的开始时间, 返回false bool static cmp(vector<int>& a,vector<int>& b){ if(a[0] != b[0]) return a[0] < b[0]; return a[1] < b[1]; } bool原创 2021-05-09 10:23:11 · 97 阅读 · 0 评论 -
leetcode-54. 螺旋矩阵
文章目录C++JavaC++class Solution {public: vector<int> ans; void solveRow(int row,int col1,int col2,vector<vector<int>>& matrix,int dir){ //从左至右 if(dir == 0) for(int i = col1; i <= col2; i++) ans原创 2021-05-09 08:49:33 · 78 阅读 · 0 评论 -
leetcode-112. 路径总和--【DFS】
文章目录C++ dfsJava dfs1java dfs2C++ dfsclass Solution {public: bool isok = false; void dfs(TreeNode* root,int nowSum,int targetSum){ if(isok) return; if(root == nullptr) return; nowSum += root->val; if(nowSum ==原创 2021-05-08 22:16:41 · 67 阅读 · 0 评论 -
leetcode-695. 岛屿的最大面积--【DFS】【BFS】
文章目录c++ dfsjava dfsC++ bfsjava bfsc++ dfsclass Solution {public: int num = 0; void dfs(int i, int j,int r, int c, vector<vector<int>>& grid){ num++; grid[i][j] = 0; int dir[4][2] = {{-1,0},{1,0},{0,1},{0原创 2021-05-08 21:30:03 · 87 阅读 · 0 评论 -
leetcode-199. 二叉树的右视图
文章目录C++ bfsjava bfsC++ bfsclass Solution {public: vector<int> rightSideView(TreeNode* root) { //找每一层的最右边一个,添加至vector vector<int> vec; queue<TreeNode*> q; if(root != nullptr){ q.push(root原创 2021-05-08 18:32:37 · 74 阅读 · 0 评论 -
leetcode-111. 二叉树的最小深度
文章目录C++ dfsjava dfsC++ bfsjava bfsC++ dfsclass Solution {public: int minDepth(TreeNode* root) { if(root == nullptr) return 0; if(root->left == nullptr && root->right == nullptr) return 1; if(root->left == nu原创 2021-05-08 17:34:45 · 52 阅读 · 0 评论 -
leetcode- 938. 二叉搜索树的范围和
文章目录题目c++ bfsC++ dfsjava dfsjava bfs题目给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例 1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10输出:23提示:树中节点数目在范围 [1, 2 * 104] 内转载 2021-05-08 14:15:27 · 48 阅读 · 0 评论 -
leetcode-3. 无重复字符的最长子串
文章目录1.题目2.code1.题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的转载 2021-05-06 22:36:53 · 48 阅读 · 0 评论