![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
Faith★
这个作者很懒,什么都没留下…
展开
-
回文子串
class Solution { public: int countSubstrings(string s) { int num = 0; for(int i = 0; i < s.size();i++){ for(int j = 0;j <= 1;j++){ int l = i; int r = i+j; while(l>=0 .原创 2020-11-26 14:48:13 · 43 阅读 · 0 评论 -
目标和
class Solution { public: int findTargetSumWays(vector<int>& nums, int S) { int sum = 0; for(int ch : nums){ sum += ch; } if(sum < S) return 0; if((sum + S)%2) return 0; .原创 2020-11-26 14:48:09 · 38 阅读 · 0 评论 -
分割等和子集
class Solution { public: bool canPartition(vector<int>& nums) { int sum = 0; for(int i = 0;i < nums.size();i++){ sum += nums[i]; } if(sum%2) return false; sum = sum/2; .原创 2020-11-26 14:48:03 · 70 阅读 · 0 评论 -
比特位计数
class Solution { public: vector<int> countBits(int num) { vector<int> v; if(num == 0){ v.push_back(0); } if(num == 1){ v.push_back(0); v.push_back(1); } if(num >= 2){ v.push_ba.原创 2020-11-26 14:47:30 · 210 阅读 · 0 评论 -
零钱兑换
class Solution { public: int coinChange(vector<int>& coins, int amount) { vector<int> dp(amount+1,amount+1); dp[0] = 0; for(int i = 0;i < dp.size();i++) { for(int coin : coins){ .原创 2020-11-26 14:49:22 · 107 阅读 · 0 评论 -
戳气球
class Solution { public: int maxCoins(vector<int>& nums) { int n = nums.size(); vector<vector<int>> dp(n+2,vector<int> (n+2)); vector<int> val(n+2); val[0] = val[n+1] = 1; for(i.原创 2020-11-26 14:47:25 · 54 阅读 · 0 评论 -
最长上升子序列
class Solution { public: int lengthOfLIS(vector<int>& nums) { int n = nums.size(); if(n==0) return 0; vector<int> dp(n,0); for(int i = 0;i < n;i++){ dp[i] = 1; for(int .原创 2020-11-26 14:47:19 · 43 阅读 · 0 评论 -
完全平方数
class Solution { public: int numSquares(int n) { vector<int> res(n+1,0x7FFFFFFF); res[0] = 0; for(int i = 1; i <= n;i++){ for(int j = 1;i-j*j>=0;j++){ res[i] = min(res[i],res[i-j*j] + 1);.原创 2020-11-26 14:47:14 · 48 阅读 · 0 评论 -
打家劫舍
class Solution { public: int rob(vector<int>& nums) { int length = nums.size(); if (nums.empty()) { return 0; } int size = nums.size(); if (size == 1) { return nums[0]; } .原创 2020-11-26 14:47:09 · 55 阅读 · 0 评论 -
乘积最大子数组
class Solution { public: int maxProduct(vector<int>& nums) { vector<int> max_F(nums),min_F(nums); for(int i = 1;i < nums.size();i++){ max_F[i] = max(max_F[i-1] * nums[i], max(max_F[i], min_F[i-1] * nums[i.原创 2020-11-26 14:47:03 · 39 阅读 · 0 评论 -
单词拆分
class Solution { public: bool wordBreak(string s, vector<string>& wordDict) { int n = s.size(); vector<bool> dp(n+1,false); dp[0] = true; for(int i = 0;i < n;i++){ if(dp[i] == false) conti.原创 2020-11-26 14:46:58 · 55 阅读 · 0 评论 -
买卖股票的最佳时机
class Solution { public: int maxProfit(vector<int>& prices) { int minprice = 1e9; int maxProfit = 0; for(auto price : prices){ maxProfit = max(maxProfit,price-minprice); minprice = min(minprice.原创 2020-11-26 14:46:52 · 43 阅读 · 0 评论 -
不同的二叉搜索树
class Solution { public: int numTrees(int n) { vector<int> v(n+1,0); v[0] = 1; v[1] = 1; for(int i = 2;i <= n;i++){ for(int j = 1;j <= i;j++){ v[i] += v[j-1]*v[i-j]; }.原创 2020-11-26 14:46:47 · 51 阅读 · 0 评论 -
编辑距离
class Solution { public: int minDistance(string word1, string word2) { vector<vector<int>> dp(word1.size()+1,vector<int> (word2.size()+1, 0)); for(int i = 0;i < dp.size();i++){ dp[i][0] = i; } .原创 2020-11-26 14:46:41 · 48 阅读 · 0 评论 -
爬楼梯
class Solution { public: int climbStairs(int n) { if(n == 1 || n == 0) return 1; if(n == 2) return 2; vector<int> v(n+1,0); v[0] = 1; v[1] = 1; v[2] = 2; for(int i = 3;i < n+1;i++){ .原创 2020-11-26 14:46:35 · 47 阅读 · 0 评论 -
最小路径和
class Solution { public: int minPathSum(vector<vector<int>>& grid) { int rows = grid.size(), columns = grid[0].size(); int res[1000][1000]; res[0][0] = grid[0][0]; for(int i = 1;i < rows;i++){ .原创 2020-11-26 14:46:29 · 39 阅读 · 0 评论 -
不同路径
class Solution { public: int uniquePaths(int m, int n) { int dp[1000][1000]; vector<vector<int>> v; for(int i = 0; i < m;i++){ for(int j = 0;j < n;j++){ if(i==0||j==0) dp[i][j] = 1;.原创 2020-11-26 14:46:22 · 28 阅读 · 0 评论 -
最大子序和
class Solution { public: int maxSubArray(vector<int>& nums) { vector<int> dp(nums.size(),0); dp[0] = nums[0]; int res = dp[0]; for(int i = 1;i < nums.size();i++){ dp[i] = max(nums[i],dp[i-.原创 2020-11-26 14:46:17 · 39 阅读 · 0 评论 -
最长回文子串
class Solution { public: string longestPalindrome(string s) { int start = 0; int end = 0; for(int i = 0;i < s.size();i++){ auto [left1,right1] = expandAroundCenter(s,i,i); auto [left2,right2] = expand.原创 2020-11-26 14:46:12 · 56 阅读 · 0 评论