当前位置: 首页 > news >正文

两种常见的ACM风格笔试题

在这里插入图片描述
在算法笔试中,一般有两种风格,一种是填函数风格,可以粗暴地理解为Leetcode中提交的风格,另一种是ACM风格,可以认为是要自己写输入输出的风格,比如华为笔试的风格。

如果是ACM风格,尽量不要使用Scanner、System.out,因为他们的IO效率非常慢。

ACM风格也有两种常见的形式,一种是给定数据规模,另一种是未给定数据规模。

给定数据规模

这道子矩阵的最大累加和问题是一道典型的给定数据规模的题目。

代码

	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){int n = (int)in.nval;in.nextToken();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;}public static int maxSumSubarray(int[] arr,int m){int max = Integer.MIN_VALUE;int cur = 0;for(int i=0;i<m;i++){cur+=arr[i];max=Math.max(max,cur);cur = cur<0?0:cur;}return max;}

未给定数据规模

对于没有给定数据规模的ACM风格的笔试题,其实这个时候你想用Scanner也用不了,因为你不知道用户会输入几个数字,所以这个时候可以考虑按行读取。

代码如下:

// 静态变量:用于存储读取的行和分割后的数字数组public static String line;public static String[] parts;public static int sum;public static void main(String[] args) throws IOException {// 1. 创建输入流:从标准输入(键盘)读取数据BufferedReader in = new BufferedReader(new InputStreamReader(System.in));// 2. 创建输出流:向标准输出(控制台)写入数据PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));// 3. 循环读取每行数据,直到输入结束(如 Ctrl+D 或文件末尾)while ((line = in.readLine()) != null) {// 4. 按空格分割当前行,得到数字字符串数组parts = line.split(" ");sum = 0; // 重置求和变量// 5. 遍历数组,将每个字符串转换为整数并累加for (String num : parts) {sum += Integer.valueOf(num);}// 6. 输出当前行的求和结果out.println(sum);}// 7. 资源清理:刷新输出流并关闭所有流out.flush();in.close();out.close();}

PS

1.BufferedReader 和 PrintWriter 内部维护缓冲区,减少了直接操作磁盘或控制台的次数(IO 操作是程序性能瓶颈之一),尤其在处理大量数据时优势明显。

2.循环读取 line != null 的逻辑适用于各种场景(如读取文件、网络流、控制台输入),只需替换输入流的来源即可复用代码。

http://www.dtcms.com/a/428003.html

相关文章:

  • 图神经网络分享系列-transe(Translating Embeddings for Modeling Multi-relational Data) (一)
  • ENVI系列教程(十九)——目标探测与识别
  • 校园超市网站开发整站优seo排名点击
  • 服务器放n个网站自己做鞋子网站
  • Spring核心 - 控制反转 IOC , 用来大量例子来解释
  • 关键词查询的分析网站有网打不开网页咋回事
  • 大型电子商务网站建设成本双流区的规划建设局网站
  • 从引流到生态:排队免单如何重构商家私域流量?
  • 云网站制作的流程图烟台网站制作厂家联系方式
  • 做视频网站要多大的主机中国建设人才信息网查
  • 网站建设发文章几点发比较合适网站开发 平均工资
  • Android dm设备和分区关系以及文件系统介绍
  • 安卓基础组件013--button
  • @MySQL 主从自动修复 - 复制错误
  • 一级造价工程师报名网站枝江市住房和城乡建设局网站
  • 网站上传程序流程it外包公司是什么意思
  • Day1 Linux 入门:9 个核心命令(whoami/id/pwd 等)
  • 【RabbitMQ】docker-compose编排部署RabbitMQ容器——CentOS
  • 免费推广网站2024建设一个图片下载网站
  • TypeScript的类型兼容是什么?
  • 网站怎么提交收录建立网站需要多少钱?
  • PySpark全面解析:大数据处理的Python利器
  • 淮北哪些企业做网站商务网站建设论文总结
  • Kerberos协议深度解析:工作原理与安全实践
  • Linux中断概述
  • 文安做网站的wordpress配置qq邮箱
  • kvmclock
  • 使用 Python 打造一个轻量级系统信息查看器
  • 旅游网站首页制作番禺核酸检测点有新调整
  • 最常用的js加解密之RSA-SHA256 加密算法简介与 jsjiami 的结合使用指南