leetcode53. 最大子数组和
注意:√
- 思路的转变很重要,dp[i]表示的是以这个位置结尾的最大的值
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] dp = new int[n];
dp[0] = nums[0];
int res = dp[0];
for (int i = 1; i < n; i++) {
dp[i] = Math.max(nums[i], dp[i-1]+nums[i]);
res = Math.max(res, dp[i]);
}
return res;
}
leetcode72. 编辑距离
注意:×
- 注意数组遍历的起止,背一背就好
public int minDistance(String s1, String s2) {
int n = s1.length();
int m = s2.length();
int[][] dp = new int[n+1][m+1];
// base case
for (int i = 0; i < n + 1; i++) {
dp[i][0] = i;
}
for (int j = 0; j < m + 1; j++) {
dp[0][j] = j;
}
for (int i = 1; i < n + 1; i++) {
for (int j = 1; j < m + 1; j++) {
if (s1.charAt(i-1)==s2.charAt(j-1)){
dp[i][j] = dp[i-1][j-1];
}else{
dp[i][j] = myMin(
dp[i-1][j-1]+1,
dp[i-1][j]+1,
dp[i][j-1]+1
);
}
}
}
return dp[n][m];
}
private int myMin(int i, int i1, int i2) {
return Math.min(i,Math.min(i1,i2));
}