动态规划
aYang^
这个作者很懒,什么都没留下…
展开
-
## leetcode 40. 组合总和 II 回溯法
leetCode40. 组合总和 II给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。注意加粗的 两个条件 : 意味着 : 不能重复, 那么要递归 随时注意下标开始的位置, 和判重class Solution {private: vector<vector<原创 2020-06-02 09:15:10 · 233 阅读 · 0 评论 -
力扣:DP正方形面积
221 题 : 全1 正方形的最大面积分析 : DP思想:首j先确定边长:边长受短边影响 ,所以dp[i][j]= min(min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) +1 获取最小边同时为了少遍历一次 ,直接保存可以满足正方形的最大边maxSide = max(side, dp[i][j])class Solution {public: int maximalSquare(vector<vector<char>>原创 2020-05-29 14:38:13 · 232 阅读 · 0 评论 -
递归与回溯算法整理(二)
这是leetcode 上的一个经典的习题: 也是我面试伴鱼时碰到的一个问题(汗~ 当初没好好刷题)问题描述 :求岛屿数量https://leetcode-cn.com/problems/number-of-islands/给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。其实这是一个 典型的递归回溯算法。 为什么这么说呢?我们的目的就.原创 2020-05-20 21:39:46 · 378 阅读 · 0 评论 -
数组相关算法整理(一)
先从基础 :二分查找开始吧 。1 二分查找别看一个 二分查找: 他也有很多要注意的点 。区间开闭?相应边界怎么控制?二分查找思想1946 年提出 , 知道1962年才出现一个真正没有bug的二分查找法。//二分查找 前提: 原数组有序template <typename T>int binarySearch(T arr[], int n, T target){ int l =0; int r = n-1;//闭区间 while(l <= r)//闭区间,相等时元素原创 2020-05-20 17:36:20 · 255 阅读 · 0 评论 -
贪心算法整理
下边先从几个题目开始体会分发饼干:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。class Solution {public: //贪心 int findContentChi原创 2020-05-20 11:46:46 · 455 阅读 · 0 评论 -
递归与回溯算法整理(一)
递归 与 回溯 回溯其实是一种暴力解决问题的方式, 对于问题规模大于20以上的数据,个人计算机将不能处理。问题分析 :对于 0 1 * # 不用考虑对于 2~ 9 每个数字都有3中情况。 那么对于一个数字串 ,将面临多种组合现象 。我们可以 画树形图。树形图会很容易发现这是一个递归问题。对于每个问题,又形成一个和原问题类似的问题。(不存在重叠)那么 我们可以递归来处理class Solution {public: vector<string> table原创 2020-05-18 18:52:15 · 471 阅读 · 0 评论 -
动态规划整理(二)
01 变种: 分割等和子集题目描述: 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200分析 自顶向下分析:我们先得到一半的值是多少 。 在进行填充 。与01 背包不同的是: 不受权重影响,但却必须得填满背包从 n个数字里取出和为 C的情况 —> 从n-1个里面取出和为C 或者 从n-1 个数字里取出和为C-w[n]的数字 + n[C]那么 对于子问题 又形成原创 2020-05-18 18:48:12 · 270 阅读 · 0 评论 -
动态规划整理(一)
(一) 硬币组合问题-动态规划(二) 切钢条问题-动态规划(三)字符串的最长公共子序列-动态规划(四)整数拆分(五)01背包问题原创 2020-05-17 20:15:24 · 1031 阅读 · 0 评论 -
最大子序和(连续)
贪心算法:贪心算法时间复杂度为O(n)什么是贪心:每一步都选择最佳方案,到最后就是全局最优的方案。本题思路:遍历数组并在每个步骤中更新:1 当前元素2 当前元素位置的最大和3 迄今为止的最大和常用情况:使用单个数组作为输入来查找最大(或最小)元素(或总和)的问题,class Solution {public:int maxSubArray(vector& n...原创 2020-03-22 17:22:58 · 515 阅读 · 0 评论 -
乘积最大子序列(连续/非连续)
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-50 <= ai <= 50)。接下来的一行包含两个整数,k 和 d (1 <= k <= 1原创 2020-05-14 22:40:16 · 516 阅读 · 0 评论 -
一招团灭6道股票问题
力扣大神的超详细解说1. 买卖股票的最佳时机 买一次class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size() ==0 ) return 0; //获取最低成本 int buy = 0; int tmpEarn= 0;//暂时利润 int maxEarn =0;//最大利润 for(int i=0;原创 2020-05-09 18:39:59 · 211 阅读 · 0 评论 -
回文串最小分割次数
给定一个字符串,返回把str全部切割成回文串的最少切割数。首先这个题是一个DP题。因为需要动态判断是不是回文串, 再动态计算最小次数。1 我们开辟一二维数组来存储 从 i-j 是不是回文串2开辟一个一维数组存储每到一个字符时,最小分割次数3 动态进行判断1 每来到一个字符前,向前查询,前文存在的回文串并将其保存。2 因为当外层第i个字符没有离开前,内层的查询随时可能会更新切割次数,所以...原创 2020-05-08 16:34:50 · 958 阅读 · 0 评论 -
DP 01背包问题
问题建模: 给定一个大小为 j 的背包,现在有一堆商品:每个商品的size 和 value 现在需要给背包里装东西: 目的是:装的东西的价值要尽可能最大。 现在问你,怎么装?问题 分析:这种问题:乍一看好像很棘手,size 大的value 可能很小。却大大浪费了空间。 细细分析: 其实是一种动态选择问题:即动态规划:核心:每次遇到一个商品 ,经过衡量选择: 放入? ...原创 2020-04-27 09:55:17 · 602 阅读 · 0 评论 -
错排问题/ 最长上升子序列 DP
NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。错排问题当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各...原创 2020-04-30 18:33:54 · 191 阅读 · 0 评论 -
完全平方数
完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.**思想:**大事化小,小事化了~。动态规划的思想:动态规划:动态计算,即时规划,规划即选择,取其最(这里是min())。对于一个数:最坏情况 = n个 1^2;...原创 2020-04-14 12:03:53 · 288 阅读 · 0 评论 -
最长按摩时间
题目描述一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/the-masseuse-lcci思路分析:很明显本体需要动态权衡...原创 2020-04-10 09:07:12 · 513 阅读 · 0 评论 -
三角形最小/最大路径
题目描述:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。来源:力扣(LeetCode)...原创 2020-03-24 17:32:16 · 2532 阅读 · 0 评论 -
走方格问题
问题描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths先看效果思路讲解:1 排列组合s ...原创 2020-03-23 14:47:32 · 1214 阅读 · 0 评论 -
打家劫舍问题
问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后...原创 2020-03-22 19:10:14 · 2135 阅读 · 0 评论 -
股票的最大利润
问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 ...原创 2020-03-22 16:17:59 · 1677 阅读 · 0 评论 -
跳台阶问题
#define _CRT_SECURE_NO_WARNINGS#include "stdio.h"#include"windows.h"#include"math.h"//青蛙跳台阶1一次一层或两层int Sum(int n){ if (n <= 0) return 0; if (n == 1) return 1; if (n == 2) return 2; ...原创 2020-03-22 14:24:54 · 1425 阅读 · 0 评论