maxSubArray(A)
maxSum <- A[1];
sum <- A[1];for i <-2 to n
if sum <0 Then
sum <- A[i];else
sum <- sum + A[i];
maxSum =Max(maxSum, sum);return maxSum;
时间复杂度分析:
输入规模:n
复杂度:O(n)
2、答: 定义:dpi为爬到第i阶台阶的方法数,则有
递推方程:
dp1=1dp2=2dpi=dpi−1+dpi−2
算法伪代码:
输入:台阶阶数n
输出:爬到n阶的方法数
climbStairs(n)if n ==1 Then return1;if n ==2 Then return2;
dp_i_1 <-2;
dp_i_2 <-1;for i <-3 to n
dp_i <- dp_i_1 + dp_i_2;
dp_i_2 = dp_i_1;
dp_i_1 = dp_i;return dp_i;
longestPalindrome(S)
n <- S.length;
dp <-newboolean[n][n]
start <-1;
maxL <-1;if n <=1 Then return S;for i <-1 to n
dp[i][i]<- True;for i <-1 to n -1if S[i]= S[i +1] Then
dp[i][i +1]<- True;
start <- i;
maxL <-2;for gap <-2 to n -1for i <-1 to n - gap - i
j <- i + gap;if dp[i +1][j -1]&& S[i]= S[j] Then
dp[i][j]<- True;
start <- i;
maxL <- gap +1;return S.subString(start, start + gap);
findPath(A, m, n)
dp <-newint[m][n];
dp[1][1]<- A[1][1];
path <-newStack()for i <-2 to m
dp[i][1]<- dp[i -1][1]+ A[i][1];for j <-2 to n
dp[1][j]<- dp[1][j -1]+ A[1][j];for i <-2 to m
for j <-2 to n
dp[i][j]<-Min(dp[i -1][j],dp[i][j -1])+ A[i][j];
i <- m; j <- n;while i >=1&& j >=1
d <- dp[i][j]- A[i][j]if i >1&& dp[i -1][j]== d Then
path.push(DOWN);else
path.push(RIGHT);return path;
getPie(P)
t <- P.length;
dp <-newint[13];
dp[-1]<-0; dp[11]<-0;
dp[4]<- P[1][4];dp[5]<- P[1][5];dp[6]<- P[1][6];
start <-3;
end <-7;for i <-2 to t
start <-Max(--start,0);
end <-Min(++end,10);for j <- start to end
dp[j]<-Max(dp[j],dp[j -1], dp[j +1])+ P[i][j];returnMax(dp);