飞的天空,自由景行 - T.J. Shi分享 http://blog.sciencenet.cn/u/tjshi Fly in the flying sky, freely climb in the mountain high——T.J. Shi

博文

最长和为零的子数组与最大子矩阵

已有 2291 次阅读 2015-9-26 23:08 |系统分类:生活其它

昨天晚上参加某笔试,竟然一个都没做出来来,好不心甘啊,折腾了半天,又是百度又是谷歌终于解决了,也学习到了好多知识,知道自己的不足。

其实这两道题男的不是算法,难的是输入格式转换。第一题需要将输入的一行空格隔开的数据转换成数组,第二题难得是将输入的一行空格,分号隔开的数转换成矩阵。

题一是求一个长度为N的数组中最长的子数组,难点在怎么从一行输入转换为数组



Java代码如下:


import java.util.*;

public class Main {

// 最大子矩阵

// 求输入矩阵中元素和最大的2 x 2矩阵的和

// 1 2 0 3 4;2 3 4 5 1;1 1 5 3 0

/*

* Author: T.J. Shi

* Time: 9/26/2015

*/

public static void main(String[] args) {

Scanner scanner= new Scanner(System.in);

String string = scanner.nextLine();

List<Integer> values = new ArrayList<Integer>();

       String[] matrixRow = string.split(";");

       String[] matrixColumn = matrixRow[0].split(" ");

   int[][] matrix = new int[matrixRow.length][matrixColumn.length];

   for (int i = 0; i < matrixRow.length; i++) {

   for (int j = 0; j < matrixColumn.length; j++) {

   matrix[i][j] = Integer.valueOf(matrixRow[i].split(" ")[j]);

   }

   }

   

   for (int i = 0; i < matrixRow.length; i++) {

   for (int j = 0; j < matrixColumn.length; j++) {

   System.out.print(matrix[i][j] + " ");

   }

   System.out.println();

   }

   

   int sum = 0, temp;

   int ii = 0, jj = 0;

   for (int i = 0; i < matrixRow.length - 1; i++) {

   for (int j = 0; j < matrixColumn.length - 1; j++) {

   temp = matrix[i][j] + matrix[i][j + 1]

   + matrix[i + 1][j] + matrix[i + 1][j + 1];

   

   if (temp > sum) {

   ii = i;

   jj = j;

   sum = temp;

   }

   }

   }

   System.out.println(ii + " " + jj);

   System.out.println(sum);

}

}


题二 最大子矩阵,难点在于怎么从一行输入转换为矩阵。



Java 代码如下:

import java.util.*;

public class Main {

// 最大子矩阵

// 求输入矩阵中元素和最大的2 x 2矩阵的和

// 1 2 0 3 4;2 3 4 5 1;1 1 5 3 0

/*

* Author: T.J. Shi

* Time: 9/26/2015

*/

public static void main(String[] args) {

Scanner scanner= new Scanner(System.in);

String string = scanner.nextLine();

List<Integer> values = new ArrayList<Integer>();

       String[] matrixRow = string.split(";");

       String[] matrixColumn = matrixRow[0].split(" ");

   int[][] matrix = new int[matrixRow.length][matrixColumn.length];

   for (int i = 0; i < matrixRow.length; i++) {

   for (int j = 0; j < matrixColumn.length; j++) {

   matrix[i][j] = Integer.valueOf(matrixRow[i].split(" ")[j]);

   }

   }

   

   for (int i = 0; i < matrixRow.length; i++) {

   for (int j = 0; j < matrixColumn.length; j++) {

   System.out.print(matrix[i][j] + " ");

   }

   System.out.println();

   }

   

   int sum = 0, temp;

   int ii = 0, jj = 0;

   for (int i = 0; i < matrixRow.length - 1; i++) {

   for (int j = 0; j < matrixColumn.length - 1; j++) {

   temp = matrix[i][j] + matrix[i][j + 1]

   + matrix[i + 1][j] + matrix[i + 1][j + 1];

   

   if (temp > sum) {

   ii = i;

   jj = j;

   sum = temp;

   }

   }

   }

   System.out.println(ii + " " + jj);

   System.out.println(sum);

}

}





https://blog.sciencenet.cn/blog-1294056-923705.html

上一篇:大数据与云计算
下一篇:秋月
收藏 IP: 222.205.108.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-17 11:25

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部