动态规划
文章平均质量分 63
动规题目集合
ych9527
这个作者很懒,什么都没留下…
展开
-
动态规划之——字符串
1.最长回文子串题目链接中心遍历法:1.外层循环遍历字符串,以每个字符串为中心点,向两边扩展,判断分为以下几种情况s[left]==s[i] : 表示左边和中心点相等 left–s[right]==s[i]:表示右边和中心点相等 right++s[left]==s[right]:表示左边和右边相等 left-- right++经过几次判断之后,left指向回文串的首部的前一个位置,right指向回文串尾部的后一个位置 -> 回文串长度= right-left-1class Soluti原创 2021-05-17 20:51:24 · 893 阅读 · 0 评论 -
动态规划之——完全背包问题
文章目录1.什么是完全背包问题2.实战例题——零钱兑换3. 实战例题—零钱兑换 II1.什么是完全背包问题2.实战例题——零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。题目链接class Solution {public: int coinChange(vector<int>& coins, int amount) { ve原创 2021-05-15 12:18:43 · 259 阅读 · 1 评论 -
动态规划之——0-1背包问题
1.什么是0-1背包问题0-1背包问题:2.目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。2.1递归法我们可以递归搜索每一种可能,即每一步的结果都有两种 ,sum+num[i] 或者 sum-nums[i] ,递归出口为 当i>=nums.size()时去判断sum是否等于targetclass S原创 2021-05-14 16:04:18 · 513 阅读 · 1 评论 -
动态规划题目合集
文章目录1.乘积最大子数组1.1动态规划解题2.空间优化1.乘积最大子数组给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。题目链接1.1动态规划解题class Solution {public: int maxProduct(vector<int>& nums) { vector<int> max_dp(nums.size(),0); vector原创 2021-05-04 14:14:39 · 290 阅读 · 2 评论 -
三角形最小路径和
三角形最短路径和1.动态规划求解给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。题目链接class Solution {public: int minimumTotal(vector<vector<int>>&原创 2021-05-01 12:21:19 · 137 阅读 · 1 评论 -
合理炒股、日进斗金
股票的最低利润class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size()<=1) return 0; int max=0; int min=prices[0]; for(int i=1;i<prices.size();i++) { max=fmax(原创 2021-04-30 20:53:12 · 91 阅读 · 1 评论 -
交错字符串
交错字符串给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。题目链接class Solution {public: bool isInterleave(string s1, string s2, string s3) { int l1=s1.size(); int l2=s2.size(); if(l1+l2!=s3.size()) return false; ve原创 2021-04-30 19:28:09 · 128 阅读 · 1 评论 -
解码方法、将数字翻译成字符串
解码方法要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)题目链接1.动态规划分析求解class Solution {public: int numDecodings(string s) { if(s.size()==0||s[0]=='0') return 0; /原创 2021-04-30 12:25:40 · 1755 阅读 · 0 评论 -
接雨水
接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。题目链接1.暴力双指针class Solution {public: int trap(vector<int>& height) { int sum=0; for(int i=1;i<(int)(height.size()-1);i++)//第一个,和最后一个柱子不需要求 { int l原创 2021-04-30 09:40:51 · 86 阅读 · 0 评论 -
动态规划——丑数、n个骰子的点数
文章目录1.丑数1.丑数我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。题目链接class Solution {public: int nthUglyNumber(int n) { vector<int> dp(n,0); dp[0]=1; int two=0,there=0,five=0; for(int i=1;i<n;i++)原创 2021-04-27 09:16:27 · 132 阅读 · 0 评论 -
动态规划题目集合——贰
文章目录1.零钱兑换2.最大正方形1.零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。题目链接题目解析:1.动态规划首先需要知道问题的最后一步是什么,我们是要求达到总金额x时最少的硬币总数2.知道最后一步我们就要推导问题的子问题,我们有coins种硬币,那么在求达到总金额x的时候的硬币数量,我们需要求达到金额x-y价值硬币时的硬币数量,这原创 2021-03-24 08:14:55 · 220 阅读 · 2 评论 -
初识动态规划
文章目录1.什么情况下使用动态规划2.常见动态规划题型3.动态规划的设计步骤4.实战演练4.1求机器人不同路径4.2 礼物的最大价值4.3硬币4.4三步问题1.什么情况下使用动态规划一个问题可以分解为子问题,且子问题之间具有联系互相影响,同时还需要有最优的子结构注意的是这是一个必要不充分条件,即想要使用动规需要满足这些条件,而满足这些条件不一定适用动态规划2.常见动态规划题型1.计数有多少种方式走到右下角有多少种方法选出K个数使得和是Sum2.求最大最小值从左上角走到右下角的最大数字和最原创 2021-03-13 21:47:13 · 1377 阅读 · 12 评论