leet
vbs16
这个作者很懒,什么都没留下…
展开
-
dp:单词拆分2
Leetcode, WordBreak2#include <iostream>#include <string>#include <unordered_set>#include <vector>#include <algorithm>using namespace std;void gen_path( const string& s, const vector<vector<bool>> &p原创 2021-07-25 13:06:21 · 98 阅读 · 0 评论 -
dp:单词拆分
Leetcode,分析设状态为 f(i),表示 s[0,i] 是否可以分词,则状态转移方程为f(i) = any_of(f(j)&&s[j + 1, i] ∈ dict), 0 ≤ j < i#include <iostream>#include <string>#include <unordered_set>#include <vector>#include <algorithm>using namespa原创 2021-07-24 19:40:04 · 104 阅读 · 0 评论 -
dp:不同的子序列
Leetcode, DistinctSubsequences分析设状态为 f(i, j),表示 T[0,j] 在 S[0,i] 里出现的次数。首先,无论 S[i] 和 T[j] 是否相等,若不使用 S[i],则 f(i, j) = f(i − 1, j);若 S[i]==T[j],则可以使用 S[i],此时 f(i, j) = f(i − 1, j) + f(i − 1, j − 1)。#include <iostream>#include <string>#includ原创 2021-07-23 20:41:50 · 67 阅读 · 0 评论 -
dp:编辑距离
Leetcode,EditDistance分析设状态为 f[i][j],表示 A[0,i] 和 B[0,j] 之间的最小编辑距离。设 A[0,i] 的形式是 str1c,B[0,j] 的形式是 str2d,如果 c==d,则 f[i][j]=f[i-1][j-1];如果 c!=d,(a) 如果将 c 替换成 d,则 f[i][j]=f[i-1][j-1]+1;(b) 如果在 c 后面添加一个 d,则 f[i][j]=f[i][j-1]+1;© 如果将 c 删除,则 f[i][j]=f[i-原创 2021-07-21 20:16:07 · 102 阅读 · 0 评论 -
dp:最小路径和
Leetcode, Minimum Path Sum类似unique_path#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;// 备忘录法vector<vector<int>> vec;int dfs(vector<vector<int>> &gr原创 2021-07-20 21:32:03 · 66 阅读 · 0 评论 -
dp:扰乱字符串
Leetcode, ScrambleString#include <iostream>#include <string>#include <vector>using namespace std;typedef string::iterator Iter;bool isScramble( Iter first1, Iter last1, Iter first2 ){ auto len = std::distance(first1, last1 ); au原创 2021-07-19 21:33:26 · 91 阅读 · 0 评论 -
dp:交错字符串
Leetcode, InterleavingString力扣官方题解设状态 f[i][j],表示 s1[0,i] 和 s2[0,j],匹配 s3[0, i+j]。如果 s1 的最后一个字符等于 s3 的最后一个字符,则 f[i][j]=f[i-1][j];如果 s2 的最后一个字符等于 s3 的最后一个字符,则 f[i][j]=f[i][j-1]。因此状态转移方程如下:f[i][j] = (s1[i - 1] == s3 [i + j - 1] && f[i - 1][j])||原创 2021-07-18 19:50:23 · 75 阅读 · 0 评论 -
dp:买卖股票的最佳时间2
Leetcode, BestTimeToBuyAndSellStock3设状态 f(i),表示区间 [0, i](0 ≤ i ≤ n − 1) 的最大利润,状态 g(i),表示区间 [i, n − 1](0 ≤ i ≤ n − 1) 的最大利润,则最终答案为 max {f(i) + g(i)} , 0 ≤ i ≤ n − 1。允许在一天内买进又卖出,相当于不交易,因为题目的规定是最多两次,而不是一定要两次。(https://gist.github.com/soulmachine/)#include &原创 2021-07-16 21:02:30 · 102 阅读 · 0 评论 -
dp:最大矩形
Leetcode, MaximalRectangle暂时不懂,记录下答案#include <iostream>#include <vector>#include <algorithm>using namespace std;int solution(vector<vector<char>> &mat){ const int m = mat.size(); const int n = mat[0].size(); vec原创 2021-07-15 22:31:10 · 88 阅读 · 0 评论 -
dp:最大子序列和
Leetcode, MaximumSubarray设状态为 f[j],表示以 S[j] 结尾的最大连续子序列和,则状态转移方程如下:f[j] = max {f[j − 1] + S[j], S[j]} , 其中1 ≤ j ≤ ntarget = max {f[j]} , 其中1 ≤ j ≤ n解释如下:• 情况一,S[j] 不独立,与前面的某些数组成一个连续子序列,则最大连续子序列和为f[j − 1] + S[j]。• 情况二,S[j] 独立划分成为一段,即连续子序列仅包含一个数 S[j],则原创 2021-07-13 21:40:39 · 152 阅读 · 0 评论 -
dp:三角形最小路径和
Leetcode, Triangle设状态为 f(i, j),表示从从位置 (i, j) 出发,路径的最小和,则状态转移方程为f(i, j) = min {f(i + 1, j), f(i + 1, j + 1)} + (i, j)#include <iostream>#include <vector>#include <algorithm>using namespace std;void dfs( const vector<vector<in原创 2021-07-12 20:11:13 · 74 阅读 · 0 评论 -
ga:装最多水的容器
Leetcode, ContainerWithMostWater#include <iostream>#include <vector>#include <algorithm>using namespace std;//暴力法int mySolution( vector<int> &height ){ int max = 0; for (int i = 0; i < height.size() - 1; ++i ) {原创 2021-07-09 20:50:15 · 55 阅读 · 0 评论 -
ga:无重复字符的最长子串
Leetcode, LongestSubstringWithoutRepeatingCharacters#include <iostream>#include <string>#include <algorithm>using namespace std;//暴力法int mySolution(string s){ int len = 0; string str; for ( int i = 0; i < s.length(); ++i )原创 2021-07-08 20:24:47 · 81 阅读 · 0 评论 -
ga:买卖股票的最佳时间2
Leetcode, BestTimeToBuyAndSellStock2#include <iostream>#include <vector>#include <algorithm>using namespace std;//差分序列,最大m字段和, m = 数组长度//时间复杂度O(n),空间复杂度O(1)int solution(vector<int> &prices){ int profit = 0; for (int i原创 2021-07-07 20:11:24 · 63 阅读 · 0 评论 -
ga:买卖股票的最佳时间
Leetcode, BestTimeToBuyAndSellStock#include <iostream>#include <vector>#include <algorithm>using namespace std;//差分序列,最大m字段和, m = 1//时间复杂度O(n),空间复杂度O(1)int solution( vector<int> &prices ){ if (prices.size() < 2) r原创 2021-07-07 20:10:17 · 80 阅读 · 0 评论 -
ga:跳跃游戏2
Leetcode, JumpGame2#include <iostream>using namespace std;int solution(int A[], int n){ int step = 0; int left = 0; int right = 0; //[left, right]当前能覆盖的区间 if (n == 1) return 0; while ( left <= right ) { ++step; const int old_right原创 2021-07-06 20:53:16 · 79 阅读 · 0 评论 -
ga:跳跃游戏
Leetcode, JumpGame#include <iostream>#include <vector>#include <algorithm>using namespace std;bool dfs( int A[], int n, int start){ if (start >= n - 1) return true; int maxStep = A[start]; for( int i = 1; i <= maxStep;原创 2021-07-06 20:52:46 · 76 阅读 · 0 评论 -
dc:Sqrt(x)
Leetcode, Sqrt(x)#include <iostream>using namespace std;int solution(int x){ if (x < 2) return x; int left = 1, right = x / 2; int last_mid; while (left <= right) { const int mid = left + (right - left) / 2; if (x / mid > mid原创 2021-07-05 22:08:38 · 87 阅读 · 0 评论 -
dc:pow
Leetcode, Pow(x,n)#include <iostream>using namespace std;//二分法:pow(x, n) = pow(x, n / 2) * pow(x, n / 2) * pow(n % 2)double power(double x, int n){ if (n == 0) return 1; if (n == 1) return x; const int half = n / 2; if (0 == n % 2) retur原创 2021-07-05 22:07:53 · 71 阅读 · 0 评论 -
dfs:单词查找
Leetcode, WordSearch#include <iostream>#include <vector>using namespace std;bool dfs( const vector<vector<char>> &board, const string &word, int index, int x, int y, vector<vector<bool>> &visited){ //原创 2021-07-04 10:45:02 · 131 阅读 · 0 评论 -
dfs:求解数独
Leetcode, SodokuSolver#include <iostream>#include <vector>using namespace std;bool isValid(const vector<vector<char>> &board, int x, int y){ int i, j; //检查同一行 for (j = 0; j < 9; ++j) { if ( j != y && board原创 2021-07-03 18:14:21 · 72 阅读 · 0 评论 -
dfs:生成括号
Leetcode, GenerateParenthess#include <iostream>#include <vector>using namespace std;void dfs(int n, int l, int r, string path, vector<string> &res){ if ( l == n ) { //补齐剩余的‘)’ res.push_back(path.append(n - r, ')') ); ret原创 2021-07-03 17:26:22 · 65 阅读 · 0 评论 -
dfs:组合之和2
Leetcode, CombinationSum2#include <iostream>#include <vector>#include <algorithm>using namespace std;void dfs(const vector<int> &nums, int gap, int start, vector<int> path, vector<vector<int>> &res){原创 2021-07-01 19:57:58 · 69 阅读 · 0 评论 -
dfs:组合之和
Leetcode, CombinationSum#include <iostream>#include <vector>#include <numeric>#include <algorithm>using namespace std;void dfs( const vector<int> &nums, vector<int> path, vector<vector<int>> &r原创 2021-07-01 19:49:01 · 82 阅读 · 0 评论 -
dfs:复原ip地址
Leetcode, RestoreIpAddress#include <iostream>#include <string>#include <vector>using namespace std;void dfs(string s, size_t start, size_t step, string ip, vector<string> &res){ if ( start == s.size() && step ==原创 2021-06-30 20:16:49 · 116 阅读 · 0 评论 -
dfs:n皇后2
Leetcode, NQueens2#include <iostream>#include <vector>#include <string>using namespace std;int _count;vector<int> columns; //已占据了哪些列vector<int> main_diag; //已占据主对角线vector<int> anti_diag; //已占据副对角线void dfs(vect原创 2021-06-24 20:45:23 · 98 阅读 · 0 评论 -
dfs:n皇后
Leetcode, NQueens#include <iostream>#include <vector>#include <string>using namespace std;vector<int> columns; //已占据了哪些列vector<int> main_diag; //已占据主对角线vector<int> anti_diag; //已占据副对角线void dfs(vector<int>原创 2021-06-24 20:39:11 · 49 阅读 · 0 评论 -
dfs:不同的路径2
Leetcode, UniquePath2#include <iostream>#include <vector>using namespace std;vector<vector<int>> vec;int dfs(int m, int n, const vector<vector<int>> &obstacle);int getOrUpdate(int x, int y, const vector<vec原创 2021-06-22 19:43:21 · 68 阅读 · 0 评论 -
dfs:不同的路径
Leetcode, UniquePath#include <iostream>#include <vector>#include <algorithm>using namespace std;//深搜 时间复杂度O(n^4),空间复杂度O(n)int solution1(int m, int n){ if (m < 1 || n < 1) return 0; //终止条件 if (m == 1 && n == 1) retu原创 2021-06-21 20:27:16 · 127 阅读 · 0 评论 -
dfs:分割回文串
Leetcode, PalindromePartitioningsolution2参考Subsets2#include <iostream>#include <string>#include <vector>using namespace std;bool isPalindrome(string s, int start, int end){ while ( start < end && s[start] == s[end] )原创 2021-06-18 21:31:56 · 109 阅读 · 0 评论 -
bfs:包围区域
Leetcode, SurroundedRegions不太懂,先记录一下,参考soulmachine#include <iostream>#include <vector>#include <queue>using namespace std;void bfs(vector<vector<char>> &board, int i, int j){ typedef pair<int, int> state_t;原创 2021-06-16 20:49:19 · 100 阅读 · 0 评论 -
bfs:词语阶梯2
Leetcode, WordLadder2虽然不太懂,但还是记录一下,参考soulmachine#include <iostream>#include <string>#include <vector>#include <unordered_set>#include <unordered_map>using namespace std;void gen_path(unordered_map<string, vector<原创 2021-06-15 20:16:06 · 74 阅读 · 0 评论 -
bfs:词语阶梯
Leetcode, WordLadder虽然不太懂,但还是记录一下,参考soulmachine#include <iostream>#include <string>#include <vector>#include <queue>#include <unordered_set>using namespace std;//时间复杂度O(n),空间复杂度O(n)int solution(const string& star原创 2021-06-11 20:22:08 · 91 阅读 · 0 评论 -
enum:根据手机按键,给出所有可能的字符串
Leetcode, LetterCombinationsOfaPhoneNumber#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;const vector<string> keyboard { " ", "", "abc", "def","ghi", "jkl", "mno", "pqrs", "原创 2021-06-10 20:52:49 · 86 阅读 · 0 评论 -
enum:组合项
Leetcode, Combinations#include <iostream>#include <vector>#include <algorithm>using namespace std;void dfs(int n, int k, int start, int cur, vector<int> &path, vector<vector<int>> &res){ if (cur == k) {原创 2021-06-09 20:45:54 · 189 阅读 · 0 评论 -
enum:全排列2
Leetcode, Premutation2#include <iostream>#include <vector>#include <algorithm>#include <functional>using namespace std;template<typename BirdIter>bool myNext_permutation(BirdIter first, BirdIter last){ auto rfirst =原创 2021-06-08 20:27:17 · 74 阅读 · 0 评论 -
enum:全排列
Leetcode, Permutations#include <iostream>#include <vector>#include <algorithm>#include <functional>using namespace std;//时间复杂度O(n!),空间复杂度O(1)vector<vector<int>> solution(vector<int> &num){ sort(num.be原创 2021-06-07 20:30:55 · 79 阅读 · 0 评论 -
enum:子集2
Leetcode, Subsets2#include <iostream>#include <vector>#include <set>#include <algorithm>using namespace std;void dfs(const vector<int> &vec, vector<int> &path, vector<int>::iterator start, vector<原创 2021-06-05 18:29:16 · 93 阅读 · 0 评论 -
enum:子集
Leetcode, Subsets递归 增量构造法void subsets(const vector<int> &vec, vector<int> &path, int step, vector<vector<int>> &res){ if (step == vec.size()) { res.push_back(path); return; } //不选vec[step] subsets(vec, path,原创 2021-06-04 22:51:38 · 75 阅读 · 0 评论 -
search:搜索二维矩阵
Leetcode, SearchA2DMatrix#include <iostream>#include <vector>using namespace std;//二分查找,时间复杂度O(logn),空间复杂度O(1)bool solution(const vector<vector<int>> &matrix, int target ){ if (matrix.empty()) return false; const int m原创 2021-06-03 20:33:18 · 81 阅读 · 0 评论