动态规划
Is Anonymous
这个作者很懒,什么都没留下…
展开
-
leetcode戳气球【双指针、动态规划】
/核心思想一句话:求出动态规划中不变的最小子问题 接着把子问题依次推导出更大的问题 而子问题怎么不受其他子问题的影响的关键就是戳破一个气球的时候认定它是最后一个戳破的 那么就不会影响到其他子问题 用dp[i][j]来表示在(i,j)开区间的最大值 dp[i][j]求的最大值实际上是以i为未破的左气球和以j未破的右气球其中戳破的气球的最大值。原创 2022-12-27 21:24:00 · 100 阅读 · 0 评论 -
最长定差子序列 【动态规划】
let arr = [1, 20, 3, 40, 5, 60, 7, 8], d = 2;let map = new Map(arr.map((e) => [e, 1]));let max = 1;for (let i = 1; i < arr.length; i++) { if (map.has(arr[i] - d)) { map.set(arr[i], map.get(arr[i] - d) + 1); max = Math.max(map.get(arr[i原创 2022-06-18 10:53:58 · 1475 阅读 · 0 评论 -
最长等差子序列、最长定差子序列、最长的斐波那契子序列的长度【动态规划思想】
const arr = [1, -20, 3, 5, 40, 7, 60];function A1(A) { const mp = new Map(); const n = A.length; const dp = new Array(n).fill(0).map(() => new Array(n)); let res = 0; for (let i = 0; i < n; i++) { mp.set(A[i], i); for (let j = i .原创 2022-05-31 11:24:27 · 173 阅读 · 0 评论 -
数组的选择n个不相邻的数的最大值【动态规划】
const slices = [1, 8, 6, 11, 2, 7, 1, 1, 7];const l = slices.length;const n = l / 3;const dp = new Array(l).fill(0).map((e) => new Array(n).fill(0));dp[0][0] = slices[0];for (let i = 1; i < l; i++) { const siv = slices[i]; if (i < 3) {原创 2022-05-26 18:28:31 · 486 阅读 · 0 评论 -
矩阵中任一一个矩形和【动态规划思想】以及找到指定不超过某个数的矩阵和
const matrix = [[0], [1]];function total(mx, dy, dx, dy1, dx1) { const m = mx.length; const n = mx[0].length; const sums = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0)); if (m > 0) { for (let i = 0; i < m; i++) {原创 2022-05-24 15:32:48 · 76 阅读 · 0 评论 -
leetcode最大平均值和的分组【动态规划】
let arr = [1, 2, 3,];let l = arr.length;let k = 1;let dp = new Array(l).fill(0).map((e) => new Array(k).fill(0));let sums = [];dp[0][0] = sums[0] = arr[0];for (let i = 1; i < l; i++) { sums[i] = sums[i - 1] + arr[i]; dp[i][0] = sums[i] /原创 2022-05-14 14:57:13 · 121 阅读 · 0 评论 -
leetcode两个字符串的删除操作【动态规划思想】
let word1 = "sea", word2 = "eat" function name() { const m = word1.length, n = word2.length; const dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0)); for (let i = 1; i <= m; i++) { const c1 = word1[i - 1]; ...原创 2022-04-24 09:21:48 · 1957 阅读 · 0 评论 -
字母的组合【动态规划与递归】
题目是将1-26个字母排序 输入数字 返回能够组成的字母组合总数 答案未经严格验证!!// 1-26// a-z// nlet s = "124510101010103";// 2 1 6 8 4// 2 1 6 84 !// 2 16 8 4// 2 1 68 4 !// 2 16 84 !// 21 6 8 4// 21 68 4 !// 21 6 84 !// total =3let arr = s.split("");let total = 0,原创 2022-04-17 10:53:12 · 2350 阅读 · 0 评论 -
leetcode 不同路径【动态规划】
题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?m = 3, n = 2let dp = new Array(n).fill(1)dp[0] = 1left = 1for (let i = 1; i < m; i++) { for (let j = 1; j < n; j++) { d原创 2022-03-25 11:42:01 · 2182 阅读 · 0 评论 -
leetcode交错字符串【动态规划】【组合方式】 重要程度3颗星
给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …注意:a + b 意味着字符串 a 和 b 连接s1原创 2022-03-23 18:13:33 · 230 阅读 · 0 评论 -
01背包与分割等和⼦集与目标和【动态规划】
头大,头铁原创 2021-12-20 22:44:20 · 341 阅读 · 0 评论 -
整数拆分【动态规划】
题目是:给定⼀个正整数 n,将其拆分为⾄少两个正整数的和,并使这些整数的乘积最⼤化。 返回你可以获得的最⼤乘积。let n = 10let dp = new Array(n + 1).fill(0)dp[2] = 1dp[3] = 2 for (let i = 4; i <= n; i++) { for (let j = 2; j < i; j++) { dp[i] = Math.max(dp[i], Math.max((i - j) * j, dp[i -原创 2021-12-20 16:34:23 · 261 阅读 · 0 评论 -
leetcode 最长公共子序列【动态规划】
let s1 = "adsv", s2 = "amsvld";let m = s1.length, n = s2.length;let dp = new Array(m + 1).fill(0).map((v) => new Array(n + 1).fill(0)); //为什么要m+1 与n+1 .因为有可能s1 或s2 为空串for (let i = 1; i <= m; i++) { const ts1 = s1[i]; for (let j = 1; j &原创 2021-12-19 22:05:13 · 65 阅读 · 0 评论 -
leetcode 地图分析[动态规划]
var arr = [[1,0,1],[0,0,0],[1,0,1]]function name(arr) { let dp = new Array(arr.length).fill(0).map(v => new Array(arr[0].length).fill(0)) let l = dp.length let w = dp[0].length let max = 0 for (let i = 0; i < l; i++) {原创 2021-12-04 12:55:26 · 132 阅读 · 0 评论 -
leetcode 01矩阵
let mat = [ [1, 1, 1], [1, 1, 1], [1, 1, 0]]let dp = []for (let i = 0; i < mat.length; i++) { let temp = [] for (let j = 0; j < mat[i].length; j++) { if (mat[i][j] === 0) { temp.push(0) } else { .原创 2021-11-15 10:57:40 · 64 阅读 · 0 评论 -
leetcode最长定差子序列[动态规划思想]
let arr = [1,2,3,4], difference = 1;let map = new Map();let max = 0;arr.forEach((v) => { const temp = map.get(v - difference) || 0; map.set(v, temp ? temp + 1 : 1); max = Math.max(max, temp + 1);});console.log(max, map);写在这 提醒我 不要每次都往dp原创 2021-11-06 11:18:57 · 121 阅读 · 0 评论 -
leetcode 不同的子序列[记忆化递归][动态规划]
let s = "gnosdsodagndsmfosdfbbasdbfsbadfbdbgbbbagbbfgbfgbabgabfbgabgbafbgabgbabgbgbbfgbadgbabgabgbabgbagbgbg", t = "bag"const resData = new Set();const tresData = new Set();const sl = s.length;const tl = t.length;function name(z, m, res = "") { if原创 2021-11-04 21:30:45 · 77 阅读 · 0 评论 -
leetcode 接雨水[动态规划]
let height = [4,0,0,1,0,6,0,2]const l = height.length;let dp = new Array(l).fill(0);dp[0] = 0;dp[1] = 0;for (let i = 2; i < l; i++) { let temp = 0; for (let j = i - 2; j >= 0; j--) { temp+=Math.min(height[j + 1],height[i]) dp[i] = Ma原创 2021-11-02 22:26:44 · 59 阅读 · 0 评论 -
子数组最大乘积与完全平方数的最小个数组成n[动态规划]
当时难以理解的动态规划var arr = [10, -5, 0, -2];var dp =[]for (let index = 0; index < arr.length; index++) { dp.push([]) }dp[0] = [arr[0], arr[0]];// dp[1] = arr[1];let max = Math.max(arr[0], arr[1]);for (let j = 1; j < arr.length; j++) { dp[j原创 2021-10-21 21:29:44 · 70 阅读 · 0 评论 -
leetcode 打家劫舍 [动态规划]
打家劫舍 经典动态规划 我之前写的var arr = [1, 5, 1, 120, 100, 1000, 10000,1000,50];var dp = new Array(arr.length).fill(0);dp[0] = arr[0];dp[1] = arr[1];let max = Math.max(dp[0], dp[1]);for (let j = 2; j < dp.length; j++) { for (let i = 2; i <= j; i++) {原创 2021-10-17 22:03:02 · 56 阅读 · 0 评论 -
最长递增子序列长度[动态规划]
最长递增子序列长度function name(nums) { let dp = new Array(nums.length).fill(1) let maxans = 1; for (let i = 1; i < nums.length; i++) { for (let j = i-1; j >=0; j--) { if (nums[i] > nums[j]) { dp[i] = Math.max(dp[i原创 2021-08-26 13:41:22 · 62 阅读 · 0 评论 -
最小路径和[动态规划]
依旧是dp tablelet grid = [[1, 3, 1], [1, 5, 1], [4, 2, 1]]function name(grid) { let dp = [] let L = grid[0].length let res = grid[0][0] for (let i = 0; i < grid.length; i++) { const temp = new Array(L).fill(0) dp.push(temp) } dp[0][原创 2021-08-26 13:38:21 · 48 阅读 · 0 评论 -
最大子序和[动态规划思想]
二叉树左右不同,组合起来,dp终点即为和let nums = [-2, -1, -10, 4, -1, 2, 1, -5, 4]let pre = 0, maxAns = nums[0];nums.forEach((x) => { maxAns = Math.max(maxAns, pre = Math.max(pre + x, x));});console.log(maxAns)原创 2021-08-26 09:54:07 · 54 阅读 · 0 评论 -
不同的二叉树和[动态规划]
二叉树左右不同,组合起来,dp终点即为和function name(k) { let arr = new Array(k + 1).fill(0) arr[0] = 1 arr[1] = 1 for (let j = 2; j <= k; j++) { for (let i = 1; i <= j; i++) { arr[j] += arr[i - 1] * arr[j - i] } } return arr}console.log(na原创 2021-08-26 09:24:36 · 58 阅读 · 0 评论 -
买卖股票交易两次和不限次[动态规划思想、动态规划]
交易两次:第一次买的时候最低价格,卖的时候最高价格,第二次买的时候要判断这次买的是不是最低的,那就要求减去第一次卖出去的价格是最低的才行,第二次卖才会最高价-动态规划思想let temp = [3, 0, 8, 9, 1, 4]var maxProfit = function (prices) { const n = prices.length; let buy1 = prices[0], buy2 = prices[0]; let sell1 = 0, sell2 = 0; for (原创 2021-08-26 09:18:14 · 242 阅读 · 0 评论 -
套娃[动态规划]
Mapvar envelopes = [[1, 3], [0, 10], [2, 4]]var maxEnvelopes = function (e) { let temp = []; let res = [] e.sort((a, b) => a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]) for (let i = 0; i < e.length; i++) { temp.push(e[i]) for (let x =原创 2021-08-25 18:02:17 · 53 阅读 · 0 评论