
动态规划
动态规划相关
zjc4j
打工人
展开
-
阿里笔试题(小强爱数学)
题目 题源 代码 应该是考察动态规划的,通过推导可以发现其规律,将每次求得的结果放到数组中。 未优化: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //T表示有T组数据 int T = sc.nextInt(); for (int原创 2021-09-20 14:50:16 · 387 阅读 · 0 评论 -
两个字符串的删除操作
题目 题源 代码 /** 可以转换为求两个字符串的最长公共子序列问题。 */ class Solution { public int minDistance(String word1, String word2) { int m = word1.length(); int n = word2.length(); int[][] dp = new int[m + 1][n + 1]; for (int i = 1; i <= m原创 2021-08-12 22:24:16 · 103 阅读 · 0 评论 -
买卖股票的最佳时机 IV
题目 题源 代码 码源 class Solution { public int maxProfit(int k, int[] prices) { int n = prices.length; if (n == 0) return 0; k = Math.min(k, n / 2); int[][] buy = new int[n][k + 1]; int[][] sell = new int[n][原创 2021-08-12 21:59:12 · 72 阅读 · 0 评论 -
买卖股票的最佳时机 III
题目 题源 代码 class Solution { /** dp1表示第一次交易,dp1[i][0],第i天,持有股票的最大收益。有两种情况: 1).第i天第一次购买股票,即第i天的最大收益为:- prices[i]; 2).第i - 1天就有股票,即第i天也没卖,最大收益为:dp1[i - 1][0]; dp1表示第一次交易,dp1[i][1],第i天,没有股票的最大收益。有两种情况: 1).第i - 1天第一次购买股票,第i天卖出原创 2021-08-12 21:01:42 · 105 阅读 · 0 评论 -
买卖股票的最佳时机含手续费
题目 题源与买卖股票的最佳时机 II极为类似。 代码 分析 dp[i][0]表示第i天,有股票。情况1,第i – 1天就有股票,第i天没卖。情况2,第i-1天没有股票,第i天新买的。 dp[i][1]表示第i天,没有股票。情况1,第i-1天就没有股票。第i-1天有股票,第i天给卖了。 class Solution { public int maxProfit(int[] prices, int fee) { int n = prices.length; int[][原创 2021-08-12 00:22:04 · 118 阅读 · 0 评论 -
最佳买卖股票时机含冷冻期
题目 题源 代码 动态规划,好好分析,相信自己能搞出来的。 class Solution { public int maxProfit(int[] prices) { if (prices.length == 0) return 0; int n = prices.length; //f[i][0]表示第i天持有股票的最大收益; // f[i][1]表示第i天不持有股票,冷冻期,累计最大收益; // f[i][2]表示原创 2021-08-11 22:57:08 · 198 阅读 · 0 评论 -
最长公共子序列
题目 题源 代码 class Solution { public int longestCommonSubsequence(String text1, String text2) { int len1 = text1.length(), len2 = text2.length(); int[][] dp = new int[len1 + 1][len2 + 1]; for (int i = 1; i <= len1; i++) {原创 2021-08-09 00:41:08 · 89 阅读 · 0 评论 -
摆动的序列
题目 题源 代码 class Solution { public int wiggleMaxLength(int[] nums) { if (nums == null || nums.length == 0) return 0; int up = 1, down = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] > nums[i - 1]) {原创 2021-08-08 22:04:02 · 72 阅读 · 0 评论 -
分割整数构成字母字符串
题目 题目 代码 class Solution { public int numDecodings(String s) { int n = s.length(); int[] dp = new int[n + 1]; dp[0] = 1; for (int i = 1; i < n + 1; i++) { if (s.charAt(i - 1) != '0') dp[i] += dp[i - 1];原创 2021-08-03 00:00:27 · 134 阅读 · 0 评论 -
完全平方数
题目 码源 代码 class Solution { public int numSquares(int n) { int[] f = new int[n + 1]; for (int i = 1; i <= n; i++) { int minn = Integer.MAX_VALUE; for (int j = 1; j * j <= i; j++) { minn = Mat原创 2021-08-02 22:21:51 · 224 阅读 · 0 评论 -
整数的拆分
题目 题源 代码 码源 class Solution { public int integerBreak(int n) { int[] dp = new int[n + 1]; for (int i = 2; i <= n; i++) { int curMax = 1; for (int j = 1; j <= n; j++) { curMax = Math.max(curM原创 2021-08-02 20:24:31 · 72 阅读 · 0 评论 -
等差数列划分
题目 题源 代码 class Solution { public int numberOfArithmeticSlices(int[] nums) { if (nums.length <= 2 || nums == null) return 0; int n = nums.length; int[] dp = new int[n]; int result = 0; for (int i = 2; i < n原创 2021-08-02 19:56:04 · 91 阅读 · 0 评论 -
区域和检索 - 数组不可变
题目 题源 代码 class NumArray { private int[] sums; public NumArray(int[] nums) { sums = new int[nums.length]; sums[0] = nums[0]; for (int i = 1; i < nums.length; i++) { sums[i] = sums[i - 1] + nums[i]; }原创 2021-08-02 19:24:58 · 83 阅读 · 0 评论 -
打家劫舍 II
题目 题目 代码 class Solution { public int rob(int[] nums) { int len = nums.length; if (len == 1) return nums[0]; else if (len == 2) return nums[1] > nums[0] ? nums[1] : nums[0]; return Math.max(rob(nums, 0, len - 2), rob(原创 2021-07-30 22:32:00 · 71 阅读 · 0 评论 -
打家劫舍1
题目 题源 代码 分析: class Solution { public int rob(int[] nums) { int len = nums.length; if (len == 1) return nums[0]; else if (len == 2) return nums[1] > nums[0] ? nums[1] : nums[0]; int[] dp = new int[len + 1];原创 2021-07-30 21:24:44 · 79 阅读 · 0 评论 -
打家劫舍 III
题目 码源 代码 简化一下这个问题:一棵二叉树,树上的每个点都有对应的权值,每个点有两种状态(选中和不选中),问在不能同时选中有父子关系的点的情况下,能选中的点的最大权值和是多少。 码源 class Solution { Map<TreeNode, Integer> f = new HashMap<TreeNode, Integer>(); Map<TreeNode, Integer> g = new HashMap<TreeNode, Integ原创 2021-07-13 20:59:40 · 82 阅读 · 0 评论 -
最长回文子序列
题目 题源 代码 码源 class Solution { // 子序列不需要连续,不同于子串 public int longestPalindromeSubseq(String s) { int n = s.length(); int[][] f = new int[n][n]; for (int i = n - 1;i >= 0; i--) { f[i][i] = 1; for (int原创 2021-07-02 20:31:33 · 62 阅读 · 0 评论 -
买卖股票的最佳时机(力扣121题)
题目 题源 代码 方法1,暴力法(该方法在运行时会超官方设定的时间): class Solution { public int maxProfit(int[] prices) { int income = 0; int buy = 0; int sell = 0; for (int i = 0; i < prices.length; i++) { for (int j = i + 1; j < pr原创 2021-06-05 20:12:41 · 105 阅读 · 0 评论 -
小路径和(动态规划)
题目 题源 代码 class Solution { public int minPathSum(int[][] grid) { if (grid == null || grid.length == 0 || grid[0].length == 0) return 0; int rows = grid.length; int cols = grid[0].length; int[][] dp = new int[原创 2021-06-01 22:45:22 · 82 阅读 · 2 评论