贪心算法之最大的子组合求解

      本来博主是没有心情写这篇博客了,因为昨天住的地方遭贼了。半夜两点多,偷开我家窗户,把博主卧室里面的玫瑰金给偷走了。当时博主就睡得特别不舒服,半夜醒来就发现手机被偷了。搞得博主后半夜基本没有睡,万幸的是,博主的手机开了“查找iphone”功能,因此开启了丢失模式之后,任小贼再牛逼,刷了机也用不了。虽然拿不回来,也要恶心死小偷。所以,在此,博主也提醒各位博友,一定一定要将iphone的“查找iphone功能”打开。

     回到正题吧,前两天在复习数据结构和算法,也看了一些算法题。于是,就将自己碰到的且学习了的算法题,贡献到博客中,以备温故而知新嘛。

     贪心算法又称为扫描算法,在《编程珠玑》这本书中有介绍,说实话,我是因为不懂这个算法才去看的这本书,而不是从书中看到这个算法。贪心算法是一种有缺陷的算法。主要思想就是通过求解局部最优解来获得全局最优解的算法。主要是这个算法无法考虑到所有的情形,所以在某一些的场景中是十分有效,但适用性不广。下面就是这个算法的一个实例应用。

    求一个数组中的所有子组中最大的一个。例如:-1,2,5,3,-2,5,-3中最大的子组和为2,5,3,-2,5这个子组。下面就给出这个算法的实现代码,代码异常简单,但是设计思想非常狡猾。

int GetMax(int m,int n){
   return m>n?m:n;
}
int MaxSubArray(int array[],int length){
    int maxendhere = 0;
    int maxsofar=0;
    for(int i = 0;i < length;i++){
    maxendhere  = GetMax(maxendhere + array[i] ,0);// 求出了数组中a[i]之前的最优子组
    maxsofar = GetMax(maxendhere ,maxsofar); // 从子组中获得最大的子组
}
  return maxsofar;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值