二維數組求和


題目:返回一個二維數組中最大子數組的和

要求:

  • 輸入一個二維數組,數組中有正數也有負數。
  • 數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
  • 求所有子數組的和的最大值

 

設計思路:

將二維數組分解為若干個一維數組,利用對一維數組求和的方法,求出二維子數組,通過比較選出最大的子數組

 

源代碼:

package erwei;
/*
 * 求二維數組最大子數組的和*/

import java.util.Scanner;
 
public class Shuzutwo {
    static Scanner in = new Scanner(System.in); 
 
     public static void main(String[] args) {        // TODO 自動生成的方法存根               
    
         int row; 
        int clo;  
         int a[] = new int [100];       //定義一個一維數組
         int[][] b = new int[20][20];   //輸入的二維數組
         int value = 0;        
         System.out.println("輸入數組的行和列");
         row = in.nextInt();
         clo = in.nextInt();        
 
         System.out.println("輸入數組元素");        
         for(int i = 0; i < row; i++)
         {
             for(int j = 0; j < clo; j++)
             {
                 
                 b[i][j] = in.nextInt();
            }
        }    

        int max = 0;
     
        for(int i = 0 ; i < clo ; i++)
         {
            a[i] = b[0][i];            
         }
max = maxsum(a);     
         
         for(int i1 = 0 ; i1 < row-1 ; i1++)
         {
             for(int j1 = 0 ; j1 < clo; j1++)   // 每一次對一維數組附初值為開始第一行的值
             {
                 a[j1] = b[i1][j1];
             }
             
             for(int j2 = i1+1 ; j2 < row ; j2++)             {
                 for(int t = 0; t < clo ; t++)
                 {
                    a[t] = a[t] + b[j2][t];   // 從第j2行開始一直加到最后一行構成一個一維數組                    
                     
                }
                 value = maxsum(a);     //調用方法求一維數組的最大子數組
                 if (value > max) {
                     max = value;
                 }
             }
         }
         
         for(int i = 0 ; i < clo ; i++)  // 計算最后一行的自大子數組
         {
             a[i] = b[row-1][i];            
         }
         value = maxsum(a);     // 求最后一行的最大子數組
        
         if (value > max) {
             max = value;
        }
         
         
        System.out.println("最大子數組為" + max);
    }
          
     //一維數組的最大子數組
     public static int maxsum(int a[])
     {
         int sum = a[0];
         int value = 0;
         for(int i = 0; i < a.length; i++)
         {
             if (value <= 0) {
             value = a[i];   
         }else {
             value += a[i];  //當value的值仍大於0時就繼續相加
         }        
         if (sum < value) {    
             sum = value;
         }
         }    
         
         return sum;
    }
     
}

  

 

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM