package question;import java.util.Arrays;public class Question123 {public static void main(String[] args) {int[] array = new int[]{1, 2, 3, 4, 5};System.out.println(new Question123().maxProfit3(array));}public int maxProfit(int[] prices) {if (prices == null || prices.length == 0) return 0;int k = 2;//最大操作次数int[][][] dp = new int[prices.length][2][k + 1];dp[0][0][0] = 0;dp[0][0][1] = Integer.MIN_VALUE / 2;dp[0][1][0] = Integer.MIN_VALUE / 2;dp[0][1][1] = -prices[0];for (int i = 1; i < prices.length; i++) {dp[i][1][0] = Integer.MIN_VALUE / 2;dp[i][0][0] = 0;for (int j = 1; j <= k; j++) {if (j > (i + 2) / 2) {dp[i][0][j] = Integer.MIN_VALUE / 2;dp[i][1][j] = Integer.MIN_VALUE / 2;} else {dp[i][0][j] = Math.max(dp[i - 1][0][j], dp[i - 1][1][j] + prices[i]);dp[i][1][j] = Math.max(dp[i - 1][1][j], dp[i - 1][0][j - 1] - prices[i]);}}}int max = Integer.MIN_VALUE / 2;for (int i : dp[prices.length - 1][0]) {max = Math.max(max, i);}return max;}public int maxProfit2(int[] prices) {int k = 2;int[][] dp = new int[prices.length + 1][k * 2 + 1];for (int i = 0; i < dp.length; i++) {for (int j = i + 1; j < dp[i].length; j++) {dp[i][j] = Integer.MIN_VALUE / 2;}}for (int i = 1; i < dp.length; i++) {//dp[i][0]=0;dp[i][0] = dp[i - 1][0];for (int j = 1; j < dp[i].length; j++) {dp[i][j] = Math.max(dp[i - 1][j - 1] + ((j & 1) == 1 ? -1 : 1) * prices[i - 1], dp[i - 1][j]);}// dp[i][0] = dp[i - 1][0];// dp[i][1] = Math.max(dp[i - 1][0] - prices[i - 1], dp[i - 1][1]);// dp[i][2] = Math.max(dp[i - 1][1] + prices[i - 1], dp[i - 1][2]);// dp[i][3] = Math.max(dp[i - 1][2] - prices[i - 1], dp[i - 1][3]);// dp[i][4] = Math.max(dp[i - 1][3] + prices[i - 1], dp[i - 1][4]);}/*1, 2, 3, 4, 50, f, f, f, f0, -1, f, f, f0, -1, 1, f, f0, -1, 2, -2, f0, -1, 3, -2, 20, -1, 4, -2, 3*///int max = Math.max(dp[dp.length - 1][2], dp[dp.length - 1][4]);int max = 0;for (int i = 2; i < dp[dp.length - 1].length; i += 2) {max = Math.max(max, dp[dp.length - 1][i]);}return max;}public int maxProfit3(int[] prices) {int k = 2;int[] dp = new int[k * 2 + 1];Arrays.fill(dp, Integer.MIN_VALUE / 2);dp[0] = 0;for (int i = 1; i <= prices.length; i++) {for (int j = dp.length - 1; j > 0; j--) {dp[j] = Math.max(dp[j - 1] + ((j & 1) == 1 ? -1 : 1) * prices[i - 1], dp[j]);}}int max = 0;for (int i = 2; i < dp.length; i += 2) {max = Math.max(max, dp[i]);}return max;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。