返回一个二维数组中的最大子数组
可以将一个二维数组按行或列分为多个一维数组求最大子数组的和。
例如3*6的二维数组:
可以将这个二维数组num[][]的第一行赋值给一个一维数组s[]求出最大子数组和max = 16;
然后将第二行的值:s[j]=+num[1][j];求出s[]的最大子数组sum,和max比较,较大的赋值给max,第三行依旧如此,即可求出最大子数组和。
void readFile(){ String record = null; int recCount = 0; int m = 0; int n = 0; int [] num = {0,0,0,0,0,0,0,0,0,0}; int i = 0; int max = -2147483648; int sum = 0; try { FileReader fr = new FileReader("C:/Users/xiaoguoguo/Desktop/input1.txt"); BufferedReader br = new BufferedReader(fr); record = new String(); while ((record = br.readLine()) != null) { String[] split = record.split(","); recCount++; i = 0; for (String str1 : split){ if(recCount == 1){ m = Integer.parseInt(str1); } if(recCount == 2){ n = Integer.parseInt(str1); } if (recCount > 2 && recCount <= m+2){ num[i] = num[i]+Integer.parseInt(str1); i++; } } sum = TwoTest(n,num); max = Math.max(max, sum); } br.close(); fr.close(); } catch (IOException e) { System.out.println("Uh oh, got an IOException error!"); e.printStackTrace(); } System.out.println(max); }
int TwoTest(int length,int number[]){ Scanner x =new Scanner(System.in); int m = length; int sum = 0; int maxA=-2147483648; for (int i = 0;i<m;i++){ sum+=number[i]; maxA=max(maxA,sum); if(sum<0)sum=0; } //System.out.println(maxA); return maxA; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具