zoukankan      html  css  js  c++  java
  • 最大子数组

    一、设计思路:

      初始化max为a[0];sum依次计算和,如果sum大于零且大于max,将max值更新,否则,sum继续往后加,避免例如 2,-1,2 这种情况,如果sum值小于零,则将sum值归零,循环。

      统计始末位置下标,每更新max记录尾标,每归零sum值,起始下标更新。

    二、源代码:

     1 package ketang;
     2 
     3 public class Zishuzu {
     4     public static void main(String[] args){
     5         int []a={5,3,-2,-1,10};
     6         int []b={-5,-3,2,-1,-10};
     7         int []c={-5,-3,-2,-1,-10};
     8         max(a);
     9         maxhuan(a);
    10         max(b);
    11         max(c);
    12     }
    13     public static void max(int []a){
    14         int max=a[0],sum=0,wei=0,tou = 0;
    15         String s="";
    16         for(int i=0;i<a.length;i++){
    17             sum+=a[i];
    18             s+=i;
    19             if(sum>=0){
    20                 if(sum>max){
    21                     max=sum;
    22                     wei=i;
    23                 }
    24                 else
    25                     continue;
    26             }
    27             else{
    28                 sum=0;
    29                 s="";
    30             }
    31         }
    32         wei++;
    33         //全负数和尾负数处理
    34         if(s.equals("")){
    35             if(max<0){
    36                 max=a[0];
    37                 for(int i=0;i<a.length;i++){
    38                     if(a[i]>max){
    39                         max=a[i];
    40                         tou=i;
    41                     }
    42                 }
    43                 tou++;
    44                 wei=tou;
    45             }
    46             else{
    47                 for(int i=0;i<a.length;i++){
    48                     if(a[i]>0){
    49                         tou=i;
    50                         break;
    51                     }
    52                 }
    53                 tou++;
    54             }
    55         }
    56         else
    57             tou=Integer.parseInt(String.valueOf(s.charAt(0)))+1;
    58         System.out.println("最大和:"+max+"  "+"头:"+tou+" 尾:"+wei);
    59     }
    60 
    61     public static void maxhuan(int []a){
    62         int[] aa=new int[(2*a.length)-1];
    63         for(int i=0;i<a.length;i++){
    64             aa[i]=a[i];
    65         }
    66         int j=a.length;
    67         for(int i=0;i<a.length-1;i++){
    68                 aa[j]=a[i];
    69                 j++;
    70         }
    71         max(aa);
    72     }
    73 }

    三、截图:

  • 相关阅读:
    循环语句
    流程控制
    特殊的赋值运算符
    位运算符
    运算符
    八种基本类型
    cmd基础命令
    springboot项目部署到tomcat步骤以及常见问题
    【算法问题】如何实现大整数相加
    【算法问题】删除k个数字后的最小值
  • 原文地址:https://www.cnblogs.com/ghs1065248758/p/6653112.html
Copyright © 2011-2022 走看看