
算法-动态规划
文章平均质量分 63
xushiyu1996818
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode-063-不同路径2
否则网格 (i,j) 可以从网格 (i−1,j) 或者 网格 (i,j−1) 走过来,因此走到该格子的方法数为走到网格 (i - 1, j) 和网格 (i, j - 1)的方法数之和,即 dp[i, j] = dp[i - 1, j] + dp[i, j - 1]。第 1 行的格子只有从其左边格子走过去这一种走法,因此初始化 dp[0][j] 值为 1,存在障碍物时为 0。如果网格 (i,j) 上有障碍物,则 dp[i][j] 值为 0,表示走到该格子的方法数为 0;解法1(成功,0ms,极快)原创 2023-07-02 22:01:40 · 801 阅读 · 0 评论 -
leetcode-045-跳跃游戏2
以此类推,不断地在到达当前步的边界 end 前更新下一步能够到达的最远距离nextMaxEnd 作为下一步的边界,更新途中一旦到达当前步的边界 end,就表示当前步已经贪心地走完了,必须跳下一步了,step++,并且下一步能够到达的最远边界我们已经在之前比较出来了,直接更新即可:end = nextMaxEnd。到这里,其实就可以明白为什么不用遍历终点了,因为边界 end 有可能是终点,那 end 一旦到了终点其实也就到了,但是我们的代码逻辑是到达 end 就得步数加一,其实这是没必要的。原创 2023-05-14 14:51:59 · 158 阅读 · 0 评论 -
剑指offer-9-斐波那契数列-java
题目及测试package sword009;/* 题目描述:写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下: * n=0,f(n)=0 ; * n=1,f(n)=1 * n>1;f(n)=f(n-1)+f(n-2).*/public class main { public static void main(String[] args) { int[] testTable = {0,1,5,10}; for (int i=0;i<testT原创 2020-11-05 09:31:37 · 156 阅读 · 0 评论 -
leetcode-494-目标和-java
题目及测试package pid494;/*494. 目标和给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1原创 2020-09-27 15:22:27 · 179 阅读 · 0 评论 -
leetcode-416-分割等和子集-java
题目及测试package pid416;/*416. 分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等原创 2020-08-19 15:02:08 · 415 阅读 · 0 评论 -
leetcode-338-比特位计数-java
题目及测试package pid338;/* 338. 比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1] 0 01 10示例 2:输入: 5输出: [0,1,1,2,1,2] 0 01 10 11 100 101 110 111进阶: 给出时间复杂度为O(n*sizeof(integer))的解答原创 2020-08-12 11:38:36 · 212 阅读 · 0 评论 -
leetcode-337-打家劫舍 III-java
题目及测试package pid337;/*337. 打家劫舍 III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,nul原创 2020-08-11 14:49:14 · 282 阅读 · 0 评论 -
leetcode-221-最大正方形-java
题目及测试package pid221;/* 221. 最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4*/import java.util.List;public class main { public static void main(String[] args) { char[][] testTabl原创 2020-08-07 16:46:16 · 327 阅读 · 0 评论 -
leetcode-96-不同的二叉搜索树-java
题目及测试package pid096;/*96. 不同的二叉搜索树给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \原创 2020-08-03 11:38:49 · 248 阅读 · 0 评论 -
leetcode-85-最大矩形-java
题目及测试package pid085;/* 85. 最大矩形给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6*/import java.util.List;public class main {原创 2020-07-31 15:57:53 · 456 阅读 · 0 评论 -
leetcode-72-编辑距离-java
题目及测试package pid072;/*72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r原创 2020-07-30 11:50:56 · 288 阅读 · 0 评论 -
leetcode-64- 最小路径和-java
题目及测试package pid064;/*64. 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。*/import java.util.List;public class main { public static原创 2020-07-29 10:18:52 · 244 阅读 · 0 评论 -
leetcode-32-最长有效括号-java
题目及测试package pid032;/* 32. 最长有效括号给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"*/public class main { public static void main(String[] args) { String [] t原创 2020-07-24 15:26:03 · 456 阅读 · 0 评论 -
leetcode-312-戳气球-java
题目及测试package pid312;/*戳气球有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i...原创 2020-01-22 11:12:45 · 409 阅读 · 0 评论 -
leetcode-140-单词拆分 II-java
题目及测试package pid140;/*单词拆分 II给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDi...原创 2020-01-20 11:55:06 · 809 阅读 · 0 评论 -
leetcode-279-完全平方数-java
题目及测试package pid279;/* Perfect Squares给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9...原创 2020-01-16 11:37:54 · 412 阅读 · 0 评论 -
leetcode-309-最佳买卖股票时机含冷冻期-java
题目及测试package pid309;/* Best Time to Buy and Sell Stock with Cooldown给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 ...原创 2020-01-15 11:57:36 · 289 阅读 · 0 评论 -
leetcode-152-乘积最大子序列-java
题目及测试package pid152;/* 乘积最大子序列给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。}*/p...原创 2020-01-13 14:20:35 · 231 阅读 · 0 评论 -
leetcode-70-爬楼梯(climbing trees)-java
题目及测试package pid070;/*爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼...原创 2018-09-30 10:24:44 · 361 阅读 · 0 评论 -
leetcode-动态规划总结
leetcode-70-爬楼梯(climbing trees)-java爬楼梯的三种解法1 简单的递归算法return climbStairs(n-1)+climbStairs(n-2); 速度是o(2^n),速度很慢2 动态规划,也是备忘录算法有一个hashmap存放之前得出的值if(map.containsKey(n)){ return map.get(n); ...原创 2018-09-30 10:28:42 · 1830 阅读 · 1 评论 -
leetcode-53- 最大子序和(maximum subarray)-java
题目及用例package pid053;/*最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。*/...原创 2018-10-09 11:29:59 · 528 阅读 · 0 评论 -
leetcode-198-打家劫舍(house robber)-java
题目及用例package pid198;/* 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出:...原创 2018-10-10 11:06:51 · 197 阅读 · 0 评论 -
leetcode-55-跳跃游戏(jump game)-java
题目及测试package pid055;import java.util.List;/*跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。...原创 2019-01-11 10:25:25 · 502 阅读 · 0 评论 -
leetcode-62-不同路径 (unique paths)-java
题目及测试package pid062;/*不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:...原创 2019-01-11 17:43:42 · 873 阅读 · 0 评论 -
leetcode-322-零钱兑换 (coin change)-java
题目及测试package pid322;/*零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coin...原创 2019-01-14 10:54:27 · 1457 阅读 · 0 评论 -
leetcode-300-最长上升子序列(longest increasing subsequence)-java
题目及测试package pid300;/*Longest Increasing Subsequence给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可...原创 2019-01-15 11:44:55 · 1352 阅读 · 0 评论 -
背包问题(动态规划)总结-java版
目录问题描述0-1背包多重背包完全背包问题描述一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]那么往该背包里装东西,怎样装才能使得最终包内物品的总价值最大。这里装物品主要由三种装法:1、0-1背包:每类物品最多只能装一次2、多重背包:每类物品都有个数限制,第i类物品最多可以装num[i]次3、完全背包:每类物品...原创 2019-06-12 15:52:22 · 1234 阅读 · 0 评论 -
动态规划总结
目录动态规划简介递归记忆化搜索状态和状态转移 子问题,最优子结构,最优化原理决策和无后效性简介动态规划的经典模型线性模型区间模型状态压缩模型树状模型动态规划的常用状态转移方程1D/0D1D/1D2D/0D2D/1D2D/2D复杂度动态规划和数据结构结合的常用优化滚动数组缩小子问题的解的范围单调队列优化...原创 2019-06-05 16:32:49 · 1445 阅读 · 0 评论 -
leetcode-121-买卖股票的最佳时机(best time to buy and sell stock)-java
题目与测试package pid121;/*买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(...原创 2018-10-08 11:38:05 · 232 阅读 · 0 评论