日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二维数组求和 团队开发

發布時間:2024/7/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维数组求和 团队开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

要求: 輸入一個二維整形數組,數組里有正數也有負數。 求所有子數組的和的最大值。要求時間復雜度為O(n)。

開發方式:團隊開發

主要思路:二維連通數組求最大子數組,我們在這里主要運用了降維的思想,主要是通過將二維數組轉化為一維數組求最大子數組的思想,在項目中定義一個算法,用于實現一行連續數組的最大子數組,并用p q記錄最大子數組的起始結束位置下標。在主函數中利用for循環實現二維數組每一行最大子數組的求和,在利用循環實現最大子數組的連接,添加對單獨正數據的判斷,從而實現連通的最大子數組問題。

代碼如下

import java.util.Scanner;public class Test {static int q=0,p=0;static Scanner str=new Scanner(System.in);public static void main(String args[]){int m1=0,m2=0; int max=0;int sum=0;System.out.println("輸入二維數組的行列數");m1=str.nextInt();m2=str.nextInt();int [][]a=new int[m1][m2];int []b=new int[m2];int []left=new int[m2];int []right=new int[m2];int []t=new int[m2];for (int i = 0; i < m1; i++){for (int j = 0; j < m2; j++){a[i][j]=str.nextInt(); }}for (int i = 0; i<m1; i++)//求每一行最大子數組{for (int j = 0; j<m2; j++) { b[j] = a[i][j]; } sum = findmax(m1, b, p, q); left[i] = p; //記錄最大子數組的坐標位置right[i] = q; t[i] = sum;}max = t[0];for (int i = 0; i + 1<m2; i++)//將最大子數組合并{if (left[i] <= right[i + 1] && right[i] >= left[i + 1])//兩行的最大子數組塊相連{max += t[i + 1];}for (int j = left[i]; j<left[i + 1]; j++){if (a[i + 1][j]>0)max += a[i + 1][j]; //判別獨立正數}}System.out.println("最大子數組和為:"+max); } public static int findmax(int n,int a[],int p, int q ){int []b=new int[a.length+1]; b[a.length]=0;int sum1=0;int max1=0;for(int i=0;i<n;i++){if(sum1<0){sum1=a[i];}else{sum1=sum1+a[i];}b[i] = sum1;}max1=b[0];for(int i=0;i<n;i++){if(max1<b[i]){max1=b[i];q=i;}}for(int i=q;i>=0;i--){if(b[i]==a[i]){p=i;break;}}return max1;} }

?

轉載于:https://www.cnblogs.com/yuezhihao/p/6679699.html

總結

以上是生活随笔為你收集整理的二维数组求和 团队开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。