// JZ42 连续子数组的最大和
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int[] dp = new int[array.length];
for (int i = 0; i < dp.length; i++) {
dp[i] = -1;
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
int maxSum = getMaxSum(array, i, dp);
dp[i] = maxSum;
if (maxSum > max) max = maxSum;
}
return max;
}
private int getMaxSum(int[] array, int cur, int[] dp) {
if (cur == 0) {
return array[0];
}
return Math.max(dp[cur - 1] + array[cur], array[cur]);
}
}
// JZ85 连续子数组的最大和(二)
import java.util.*;
import java.util.stream.Collectors;
public class Solution {
public int[] FindGreatestSumOfSubArray(int[] array) {
int[] dp = new int[array.length];
for (int i = 0; i < dp.length; i++) {
dp[i] = -1;
}
ArrayList<int[]> arrDp = new ArrayList<>();
int max = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
int maxSum = getMaxSum(array, i, dp, arrDp);
dp[i] = maxSum;
if (maxSum > max) max = maxSum;
}
int point = 0;
int ct = Integer.MIN_VALUE;
for (int i = 0; i < dp.length; i++) {
if (dp[i] == max) {
int len = arrDp.get(i)[1] - arrDp.get(i)[0];
if (len > ct) {
point = i;
}
}
}
List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
List<Integer> resultList = list.subList(arrDp.get(point)[0], arrDp.get(point)[1] + 1);
int[] result = new int[resultList.size()];
for (int i = 0; i < resultList.size(); i++) {
result[i] = resultList.get(i);
}
return result;
}
private int getMaxSum(int[] array, int cur, int[] dp, ArrayList<int[]> arrDp) {
if (cur == 0) {
dp[0] = array[0];
arrDp.add(new int[] {0, 0});
return array[0];
}
if ( cur >= 1 && (dp[cur - 1] >= 0) ) {
arrDp.add(new int[] {arrDp.get(cur - 1)[0], cur});
}
if (cur >= 1 && (dp[cur - 1] < 0)) {
arrDp.add(new int[] {cur, cur});
}
return Math.max(dp[cur - 1] + array[cur], array[cur]);
}
}
// JZ69 跳台阶
public class Solution {
public int jumpFloor(int target) {
return jump(target);
}
private int jump(int target) {
if (target == 1) {
return 1;
}
if (target == 2) {
return 2;
}
return jump(target - 1) + jump(target-2);
}
}
华为机试-知识分类篇-动态规划
最新推荐文章于 2024-07-24 07:47:13 发布