算法代码笔试中处理输入输出的问题【java】

学习链接

1.填函数风格

在这里插入图片描述

2.acm风格(笔试、比赛常见)

2.1 规定数据量(BufferedReader、StreamTokenizer、PrintWriter)

2.2 按行读(BufferedReader、PrintWriter)

2.3 不要用Scanner、Sysyem.out ,IO效率慢

package class019;

// 展示acm风格的测试方式
// 子矩阵的最大累加和问题,不要求会解题思路,后面的课会讲
// 每一组测试都给定数据规模
// 需要任何空间都动态生成,在大厂笔试或者比赛中,这种方式并不推荐
// 测试链接 : https://www.nowcoder.com/practice/cb82a97dcd0d48a7b1f4ee917e2c0409?
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下的code,提交时请把类名改成"Main",可以直接通过

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Code02_SpecifyAmount{
   

	public static void main(String[] args) throws IOException {
   
		// 把文件里的内容,load进来,保存在内存里,很高效,很经济,托管的很好
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// 一个一个读数字
		StreamTokenizer in = new StreamTokenizer(br);
		// 提交答案的时候用的,也是一个内存托管区
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		while (in.nextToken() != StreamTokenizer.TT_EOF) {
    // 文件没有结束就继续
			// n,二维数组的行
			int n = (int) in.nval;
			in.nextToken();
			// m,二维数组的列
			int m = (int) in.nval;
			// 装数字的矩阵,临时动态生成
			int[][] mat = new int[n][m];
			for (int i = 0; i < n; i++) {
   
				for (int j = 0; j < m; j++) {
   
					in.nextToken();
					mat[i][j] = (int) in.nval;
				}
			}
			out.println(maxSumSubmatrix(mat, n, m));
		}
		out.flush();
		br.close();
		out.close();
	}

	// 求子矩阵的最大累加和,后面的课会讲
	public static int maxSumSubmatrix(int[][] mat, int n, int m) {
   
		int max = Integer.MIN_VALUE;
		for (int i = 0; i < n; i++) {
   
			// 需要的辅助数组,临时动态生成
			int[] arr = new int[m];
			for (int j = i; j < n; j++) {
   
				for (int k = 0; k < m; k++) {
   
					arr[k] += mat[j][k];
				}
				max = Math.max(max, maxSumSubarray(arr, m));
			}
		}
		return max;
	}

	// 求子数组的最大累加和,后面的课会讲
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值