随笔分类 -  动态规划(递推),贪心,分治

这类都是通过解决局部子问题来达到全局最优解的算法思想
摘要:这是一道水题,作为没有货的水货楼主如是说。 题意:已知一个数组nums {a1,a2,a3,.....,an}(其中0<ai <=1000(1<=k<=n, n<=20))和一个数S c1a1c2a2c3a3......cnan = S, 其中ci(1<=i<=n)可以在加号和减号之中任选。 求有多 阅读全文
posted @ 2017-06-12 21:32 Breeze0806 阅读(3557) 评论(0) 推荐(1)
摘要:由于题意太长,请自己翻译,很容易懂的。 做法:从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求。动态规划的思路下次有空写个专题 阅读全文
posted @ 2016-05-06 10:35 Breeze0806 阅读(168) 评论(0) 推荐(0)
摘要:1 class Solution { 2 public: 3 vector vs_; 4 Solution(){ 5 string t("1"); 6 vs_.push_back(t); 7 for(int i = 1; i< 30;++i){ 8 string t1 = vs_[i - 1... 阅读全文
posted @ 2016-03-17 21:11 Breeze0806 阅读(152) 评论(0) 推荐(0)
摘要:杨辉三角,这次要输出第rowIndex行 用滚动数组t进行递推 t[(i+1)%2][j] = t[i%2][j] + t[i%2][j - 1]; 1 class Solution { 2 public: 3 vector<int> getRow(int rowIndex) { 4 if(rowI 阅读全文
posted @ 2016-03-07 20:13 Breeze0806 阅读(131) 评论(0) 推荐(0)
摘要:杨辉三角,即组合数 递推 1 class Solution { 2 vector<vector<int>> v; 3 public: 4 Solution() { 5 for(int i = 0; i < 50; ++i){ 6 vector<int> t(i+1,1); 7 for(int j = 阅读全文
posted @ 2016-03-03 20:49 Breeze0806 阅读(129) 评论(0) 推荐(0)
摘要:题意是强盗能隔个马抢马,看如何获得的价值最高 动态规划题需要考虑状态,阶段,还有状态转移,这个可以参考《动态规划经典教程》,网上有的下的,里面有大量的经典题目讲解 dp[i]表示到第i匹马时的最大价值是多少, 因此所有的dp[i] = max(dp[i-2]+nums[i],dp[i-1]) (其中 阅读全文
posted @ 2016-03-01 19:55 Breeze0806 阅读(352) 评论(0) 推荐(0)
摘要:其实就是斐波那契数列 参考dp[n] = dp[n-1] +dp[n-2]; 1 class Solution { 2 public: 3 int climbStairs(int n) { 4 int f1 = 0; 5 int f2 = 1; 6 int f3 = 0; 7 for(int i = 阅读全文
posted @ 2016-02-24 10:40 Breeze0806 阅读(138) 评论(0) 推荐(0)
摘要:在一个长度为n的数组中找出出现次数超过(n+1)/2次的数 说明请参考编程之美中的2.3 class Solution { public: int majorityElement(vector<int>& nums) { int candidate; int ntimes,i; for(ntimes 阅读全文
posted @ 2016-01-16 21:05 Breeze0806 阅读(339) 评论(0) 推荐(0)
摘要:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。交易次数不限,但一次只能交易一支股票,也就是说手上最多只能持有一支股票,求最大收益。 关键:能赚就赚 1 class Solution { 2 public: 3 int maxProfit(vector<int>& prices) 阅读全文
posted @ 2016-01-16 20:35 Breeze0806 阅读(134) 评论(0) 推荐(0)
摘要:给出一个数组 nums[i](i = 0,1,...,n-1) 输出数组output[i]满足output[i] =nums[0] * num[1] * num[2] *..*num[i-1] * num[i+1]*... *num[n-1]要求不能使用除了output之外的大内存,满足时间复杂度O... 阅读全文
posted @ 2016-01-16 18:32 Breeze0806 阅读(507) 评论(0) 推荐(0)
摘要:此题主要是讲给你一组数,如何将数连在一起能得到最大值(最小值反之),注意局部最优,就是说如果 123 234两个连在一起怎么样最大,显然是234123比123234大,对于3个数我们可以找到类似的性质,4个数一样。。。因此我们得到这个局部最优的排序是全局最优的。因此这个实现最核心的代码就是函数cmp 阅读全文
posted @ 2016-01-14 17:05 Breeze0806 阅读(582) 评论(0) 推荐(0)