首页 > 代码库 > 整数组中取最大子数组

整数组中取最大子数组

寻找最大子数组

1.设计思路;首先数组首尾连接问题 ,只需要将两个相同数组拼接即可。

            寻找最大子数组流程:定义变量 max  shou  wei   从数组下标0开始循环,最初遇到整数小于0,舍去,找第一个大于零的数字。

                                                            第一个正整数存储   于shou   从下一个开始循环,求和。

                                                           当和小于0,舍去。      循环一遍 求得和值最大值的下标。

程序:

 public class Max {
  public static void main(String args[]){
      int a[]={-5,-5,7,0,5,-4,-8,-9};
      int aa[]={1,-5,7,-3,-4,4,8,-9,1,5,7,-3,-4,4,8,-9};
     
      am(a);
  }
  
  static int [] am(int []aa){
      int shou=0; int wei=0;
      int shou2=0;int wei2=shou2;
      int max=0;int max2;
      for(int j=0;j<aa.length-1;j++){
          while(aa[shou2]<0){
              shou2++;
              wei2++;j++;
              max=aa[shou2];
              if(aa[shou2]>aa.length-1){break;}
              continue;
           }
          if(max+aa[wei2]<0){
            
              shou2=wei2+1;
              wei2=wei2+2;j++;
              max=aa[shou2];
              
              continue;
          }

          else {
              max=aa[wei2]+max; 
              if(aa[wei2]+max>max){               
                 shou=shou2;wei=wei2;
              }
              wei2++;
              
          }
      }
      if (max <= 0) {
            for (int i = 0; i < aa.length; i++) {
                if (i == 0) {
                    max = aa[i];
                }
                if (aa[i] > max) {
                    max = aa[i];
                }
            }
        }
    
      System.out.println("第一次答案 下标开始"+shou+"下标结尾"+wei);
      if(wei>aa.length/2){wei=wei-aa.length/2;
      System.out.println("下标开始"+shou+"  下标结尾第二圈"+wei);}
      else{System.out.println("下标开始"+shou+"下标结尾"+wei);}
      return aa;
  }
}

运行结果 截图;

技术分享

 

          

 

整数组中取最大子数组