博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪心算法
阅读量:5070 次
发布时间:2019-06-12

本文共 1885 字,大约阅读时间需要 6 分钟。

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

关键思想:就是黑猩猩掰棒子的思想,每次与下一个作比较,如果下一个比较好,那么我就扔掉上一个,获取下一个,也就是说,只关注手中的这一个和下一个,而不关注其他,这样就可以得到局部最优解,在某些问题上就可以得到全局最优解(但是对于智能算法之类的,就可能达不到整体最优值的需求,这里不做讨论)。

1.求解数组中连续数据的最大和

C++代码:

#include<iostream>

#include<string>
#include<vector>
using namespace std;
int MaxSubstring(vector<int>& vec)
{
int sum = vec[0];
int curmax = vec[0];
int i;
for(i=1;i<vec.size();i++)
{
curmax += vec[i];
if(curmax<0)
curmax = 0;
if(curmax>sum)
sum = curmax;
}
if(sum<0){
for(i=0;i<vec.size();i++)
if(vec[i]>sum)
sum = vec[i];
}
return sum;
}
int main()
{
int array[]={-1,1,-3,4,-1,2,1,-5,4};
vector<int> vec(array,array+sizeof(array)/sizeof(int));
cout<<MaxSubstring(vec)<<endl;
return 0;
}

运行结果:

6

2.糖果问题

问题描述:给站成一排的孩子分糖果,要求给高的孩子的糖果要比他周围比他矮的的孩子的糖果多,问最少要分多少糖果?

C++代码:

#include<iostream>

#include<vector>
using namespace std;
int candy(vector<int>& ratings)
{
vector<int> candy(ratings.size(),1);
int sum,i;
for(i=1;i<ratings.size();i++)
{
if(ratings[i]>ratings[i-1])
candy[i]=candy[i-1]+1;
}
sum=candy[ratings.size()-1];
for(i=ratings.size()-2;i>=0;i--)
{
if(ratings[i]>ratings[i+1]&&candy[i]<=candy[i+1])
candy[i]=candy[i+1]+1;
sum += candy[i];
}
return sum;
}
int main()
{
int array[]={4,2,6,8,5};
vector<int> vec(array,array+sizeof(array)/sizeof(int));
cout<<candy(vec)<<endl;
return 0;
}

 

运行结果:

9

 

3.跳远问题:

问题描述:一个数组表示能从当前跳的最大步数,问能否跳的出去这个数组?

C++代码:

#include<iostream>

#include<vector>
using namespace std;
bool canJump(vector<int>& vec)
{
if(vec.size()<=0)
return true;
int maxstep = vec[0];
int i;
for(i=1;i<vec.size();i++)
{
if(maxstep == 0)
return false;
maxstep--;
if(maxstep<vec[i])
maxstep = vec[i];
if(maxstep+i >= vec.size()-1)
return true;
}
}
int main()
{
int array[]={2,3,1,1,4};
vector<int> vec(array,array+sizeof(array)/sizeof(int));
cout<<canJump(vec)<<endl;
return 0;
}

运行结果:

1

 

转载于:https://www.cnblogs.com/qysqys/p/5364268.html

你可能感兴趣的文章
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
查看>>
第一阶段冲刺06
查看>>
WIN下修改host文件并立即生效
查看>>
十个免费的 Web 压力测试工具
查看>>
ckeditor 粘贴后去除html标签
查看>>
面试题
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
数据库框架的log4j日志配置
查看>>
lintcode-easy-Remove Element
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
switchcase的用法
查看>>
React.js 小书 Lesson15 - 实战分析:评论功能(二)
查看>>
Java基础03 构造器与方法重载
查看>>
kafka的使用
查看>>
编写Nginx启停服务脚本
查看>>
这些老外的开源技术养活了很多国产软件
查看>>
看图软件推荐
查看>>
安全测试的一些漏洞和测试方法
查看>>