zoukankan      html  css  js  c++  java
  • 分治策略解决最大子数组问题

    分治策略的思路:

    1.将问题分解为一些子问题,其中有的子问题的形式与原问题相同,只是规模更小

    2.递归,求解使递归停止的边界条件

    3.合并

    对于最大子数组问题,

     1 #include <iostream>
     2 using std::cout;
     3 
     4 inline int max(int a,int b,int c){return a>b?(a>c?a:c):(b>c?b:c);}
     5 
     6 int foo(int *p,int len)
     7 {
     8     //递归边界
     9     if(1==len)return *p;
    10 
    11     //子问题1,求解数组以中点向两侧延伸情况下的最大值
    12     int save,i,leftval,rightval;
    13     save=leftval=p[len/2-1];
    14     rightval=p[len/2];
    15     for(i=len/2-2;i>=0;i--)
    16     {
    17         save+=p[i];
    18         if(save>leftval)leftval=save;
    19     }
    20     save=rightval;
    21     for(i=len/2+1;i<len;i++)
    22     {
    23         save+=p[i];
    24         if(save>rightval)rightval=save;
    25     }
    26     int v1=max(leftval,rightval,leftval+rightval);
    27 
    28     //递归求解出数组中点两侧分别的最大值
    29     int v2=foo(p,len/2);
    30     int v3=foo(p+len/2,len-len/2);
    31 
    32     //合并
    33     return max(v1,v2,v3);
    34 }
    35 
    36 
    37 int main()
    38 {
    39     int a[]={-1,2,5,4,-3,-1};
    40     cout<<foo(a,6)<<"
    ";
    41 
    42     return 0;
    43 }
  • 相关阅读:
    html$css_day05
    html$css_day04
    html$css_day03
    html$css_day02
    html$css_day01
    日常笔记19/3/04-19/3/10
    堆排序
    js对象之XMLHttpReques对象学习
    前端页面显示问题解决步骤(方法)
    SpringBoot跨域小结
  • 原文地址:https://www.cnblogs.com/backinfile/p/5821647.html
Copyright © 2011-2022 走看看