Java如何访问多维List元素?结合HackerRank 2D Arrays问题
解决方案
二维List访问方法
Java中二维List的元素访问不能使用数组的[行][列]语法,需通过两层get()方法实现,语法为:
// 获取第row行第col列的元素,索引从0开始计数 int val = arr.get(row).get(col);
本题完整实现代码
你可以直接在给定初始代码的bufferedReader.close();前补充如下逻辑即可完成题目要求:
import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.regex.*; import java.util.stream.*; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; public class Solution { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); List<List<Integer>> arr = new ArrayList<>(); IntStream.range(0, 6).forEach(i -> { try { arr.add( Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" ")) .map(Integer::parseInt) .collect(toList()) ); } catch (IOException ex) { throw new RuntimeException(ex); } }); // 补充解题逻辑开始 int maxSum = Integer.MIN_VALUE; // 遍历所有沙漏的左上角坐标 for (int i = 0; i <= 3; i++) { for (int j = 0; j <= 3; j++) { // 计算当前沙漏的和 int currentSum = arr.get(i).get(j) + arr.get(i).get(j+1) + arr.get(i).get(j+2) + arr.get(i+1).get(j+1) + arr.get(i+2).get(j) + arr.get(i+2).get(j+1) + arr.get(i+2).get(j+2); // 更新最大值 if (currentSum > maxSum) { maxSum = currentSum; } } } System.out.println(maxSum); // 补充解题逻辑结束 bufferedReader.close(); } }
关键逻辑说明
- 遍历范围限制:6×6矩阵中,沙漏的行、列跨度均为3,因此左上角索引最大只能取3,避免访问越界
- 最大和初始值设置为
Integer.MIN_VALUE,适配输入存在负数的场景,避免全负输入时结果计算错误 - 单次沙漏和固定取7个点位的数值相加,完全符合题目定义的沙漏结构
内容的提问来源于stack exchange,提问作者Hakeem MRK
相关产品推荐
相关产品推荐

