
动态规划
stefanharden
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Word Break 分词
class Solution {public: bool wordBreak(string s, unordered_set &dict) { int n=s.size(); vector dp(n+1,false); //dp[i]表示以第一个字符开始的,长度为i的substring 是不是可以拆分成单词,从左往右推进,每到一个原创 2014-01-21 15:10:00 · 499 阅读 · 0 评论 -
Scramble String 搅乱的字符串
class Solution {public: bool isScramble(string s1, string s2) { if(s1.size()!=s2.size()) return false; if(s1.size()==1) { if(s原创 2014-01-21 14:40:56 · 658 阅读 · 0 评论 -
Maximal Rectangle 最大的矩形
class Solution {public: int maximalRectangle(vector > &matrix) { int m=matrix.size(); if(m==0) return 0; int n=matrix[0].size(); if(n==0) r原创 2014-01-21 11:10:55 · 533 阅读 · 0 评论 -
Palindrome Partitioning II 最少的回文数切割
class Solution {public: int minCut(string s) { int n=s.size(); vector dp(n+1); vector> f(n,vector(n,false)); for(int i=0;i { dp[i]=n-1-原创 2014-01-21 11:08:45 · 843 阅读 · 0 评论 -
Edit Distance 编辑距离
class Solution {public: int minDistance(string word1, string word2) { int m=word1.size(); int n=word2.size(); vector> dp(m+1,vector(n+1)); for(int i=0;i原创 2014-01-21 14:46:42 · 452 阅读 · 0 评论 -
Minimum Path Sum 最小路径和
class Solution {public: int minPathSum(vector > &grid) {int m=grid.size();int n=grid[0].size();vector> dp(m,vector(n,0));dp[0][0]=grid[0][0];for(int i=1;i{ dp[i][0]=dp[i-1][0]+原创 2014-01-21 14:43:55 · 421 阅读 · 0 评论 -
Best Time to Buy and Sell Stock III 买卖股票的最好时间
class Solution {public: int maxProfit(vector &prices) { int n=prices.size(); if(n return 0; vector left(n,0); vector right(n,0); int minbuy原创 2014-01-21 11:12:33 · 632 阅读 · 0 评论 -
Triangle 三角形从顶到底的最短路径
class Solution {public: int minimumTotal(vector > &triangle) { int m=triangle.size(); for(int i=m-2;i>=0;i--) {//triangle[i][j表示从底边出发,到达i,j点的最短路径的长度 for(原创 2014-01-21 11:01:54 · 515 阅读 · 0 评论 -
Distinct Subsequences 字符串在另一个字符串中出现的次数
class Solution {public: int numDistinct(string S, string T) { int m=S.size(); int n=T.size(); vector> dp(m+1,vector(n+1)); dp[0][0]=1; //dp[i][j]表示T原创 2014-01-21 15:01:05 · 349 阅读 · 0 评论 -
Interleaving String 交叉的字符串
class Solution {public: bool isInterleave(string s1, string s2, string s3) { int m=s1.size(); int n=s2.size(); int k=s3.size(); if(m+n!=k) return fa原创 2014-01-21 11:18:09 · 534 阅读 · 0 评论 -
Maximum Subarray 最大连续子数和
class Solution {public: int maxSubArray(int A[], int n) { int *dp=new int[n]; dp[0]=A[0]; int sum=A[0]; for(int i=1;i { dp[i]=dp[i-1]>0?dp[i-1]+A[i]:A[i];原创 2014-01-21 11:06:49 · 389 阅读 · 0 评论 -
Decode Ways 编码的方式
class Solution {public: int numDecodings(string s) { int n=s.size(); if(n==0) return 0; vector dp(n,0); if(s[0]=='0') return 0; if原创 2014-01-21 14:49:55 · 432 阅读 · 0 评论