zoukankan      html  css  js  c++  java
  • 返回一个二维整数数组中最大联通子数组的和

      程序设计思路:首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组。再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标。这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到;第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价。最后得到的就是最大联通子数组的和。

      程序源代码:

      1 package 最大子数组;
      2 
      3 import java.util.Scanner;
      4 
      5 public class judge2 {
      6 
      7     public static void main(String[] args) {
      8         // TODO Auto-generated method stub
      9 
     10 
     11         int m,n,i,j,t2;
     12         Integer smark=new Integer(0);
     13         Integer mmark=new Integer(0);
     14 
     15         int sum;
     16 
     17         int up[]=new int[100];
     18         int down[]=new int[100];
     19         int t[]=new int[100];
     20         int a[][]=new int[100][100];
     21         int b[]=new int[100];
     22             
     23         System.out.println("请输入二维数组的行数和列数:");
     24          Scanner scanner=new Scanner(System.in);
     25         m=scanner.nextInt();
     26         n=scanner.nextInt();
     27         System.out.println("请输入这个二维矩阵:");
     28         
     29         for(i=0;i<m;i++)
     30 
     31         {
     32 
     33             for(j=0;j<n;j++)
     34 
     35             {
     36 
     37                 a[i][j]=scanner.nextInt();;
     38 
     39             }
     40 
     41         }
     42 
     43         //把二维数组按行分解为几个一维数组
     44         for(i=0;i<m;i++)
     45 
     46         {
     47 
     48             for(j=0;j<n;j++)
     49 
     50             {
     51 
     52                 b[j]=a[i][j];
     53 
     54             }
     55 
     56             sum=Max(n,b,smark,mmark);
     57 
     58             up[i]=smark;                                    
     59 
     60             down[i]=mmark;
     61 
     62             t[i]=sum;
     63 
     64      
     65 
     66         }
     67 
     68         t2=t[0];
     69 
     70         for(i=0;i+1<m;i++)
     71 
     72         {
     73 
     74             if(up[i]<=down[i+1] && down[i]>=up[i+1])
     75 
     76             {
     77 
     78                 t2+=t[i+1];
     79 
     80             }
     81 
     82              for(j=up[i];j<up[i+1];j++)
     83 
     84             {
     85 
     86                 if(a[i+1][j]>0) t2+=a[i+1][j];                   //判别独立正数
     87 
     88             }
     89 
     90      
     91 
     92         }
     93 
     94         System.out.println(t2);   
     95     }
     96     public static int Max(int n,int a[],Integer smark,Integer mmark)
     97 
     98     {
     99 
    100         int b[]=new int [100];
    101 
    102         int i,sum1= Integer.MIN_VALUE,max1=0;
    103         int j=0;
    104         for(i=0;i<n+j;i++)
    105 
    106         {
    107 
    108             if(sum1<0)
    109 
    110             {
    111 
    112                 sum1=a[i%n];
    113                 j=i;
    114             }
    115 
    116             else
    117 
    118             {
    119 
    120                 sum1=sum1+a[i%n];
    121 
    122             }
    123            
    124             b[i]=sum1;
    125 
    126         }
    127 
    128         max1=b[0];
    129       
    130         for(i=0;i<n+j;i++)
    131 
    132         {
    133 
    134             if (max1<b[i]) 
    135 
    136              {
    137 
    138                  max1= b[i];
    139 
    140                  mmark = i;
    141                 
    142 
    143              }
    144             
    145         }
    146 
    147          for (i = mmark;i >= 0;i--) 
    148 
    149         {
    150 
    151             if (b[i] == a[i]) 
    152 
    153             {
    154 
    155                  smark = i;
    156 
    157                  break;
    158 
    159             }
    160 
    161         }
    162 
    163          return max1;
    164 
    165     }
    166 }
    167         

      程序运行结果截图:

  • 相关阅读:
    Oracle基础 07 参数文件 pfile/spfile
    Oracle基础 06 控制文件 controlfile
    Oracle基础 05 联机日志 redolog
    Oracle基础 04 归档日志 archivelog
    Oracle基础 02 临时表空间 temp
    Oracle基础 03 回滚表空间 undo
    Oracle基础 01 表空间 tablespace
    PL/SQL Developer 连接 Oracle
    Windows下卸载Oracle
    Vue:基础语法
  • 原文地址:https://www.cnblogs.com/wangfengbin/p/6675256.html
Copyright © 2011-2022 走看看