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

Java基础练习八(二维数组)

1.装水问题

有一个 异形 容器,用一个 n * n 的二维数组来表示。其中 1 表示容器实心部分, 0 表示空心部分。现使用此容器装水,能装多少水(每个元素都表示一份水,只有有挡板的部分能装水)?

在这里插入图片描述

public class Work1001 {public static void main(String[] args) {int[][] arr = {{0, 0, 1, 0, 0, 0, 0},{0, 0, 1, 0, 0, 0, 0},{0, 0, 1, 0, 1, 0, 0},{1, 0, 1, 0, 1, 0, 1},{1, 1, 1, 1, 1, 1, 1},};int sum = 0;for (int i = 0; i < arr.length; i++) {int count = 0;int v = 0;for (int j = 0; j < arr[0].length; j++) {if (arr[i][j] == 1) {count++;if (count == 2) {count = 1;sum += v;v = 0;}} else {if (count > 0) {v++;}}}}System.out.println(sum);}
}

思考:若是使用一个一维数组来表示实心部分高度该如何计算?(int[] arr = {2, 5, 1, 2, 3, 4, 7, 2}; )

import java.util.Arrays;public class Work10012 {public static void main(String[] args) {int[] arr = {2, 5, 1, 2, 3, 4, 7, 2};int len = Arrays.stream(arr).max().orElse(0);// 定义二维数组int[][] arr1 = new int[len][arr.length];// 将一维数组转为二维数组for (int i = len - 1; i >= 0; i--) {for (int j = 0; j < arr.length; j++) {if (arr[j] > 0) {arr1[i][j] = 1;arr[j]--;}}}// 计算能装多少水int sum = 0;for (int i = 0; i < arr1.length; i++) {int count = 0;int v = 0;for (int j = 0; j < arr1[0].length; j++) {if (arr1[i][j] == 1) {count++;if (count == 2) {count = 1;sum += v;v = 0;}} else {if (count > 0) {v++;}}}}System.out.println(sum);}
}

Arrays.stream(arr).max().orElse(0) 这行代码使用了 Java 8 中的流式操作。每个部分的含义:

  • 对于给定的数组 arr,Arrays.stream(arr) 方法将其转换为一个流(Stream)对象。流是用于在一系列元素上执行操作的一种高级抽象。

  • 然后,我们使用 .max() 方法来获取流中的最大值。这将返回一个 Optional 类型的对象,它可以包含一个整数值(如果流中有元素),或者为空(如果流为空)。

  • 最后,我们使用 .orElse(0) 方法指定一个默认值。如果 Optional 对象为空,则返回指定的默认值,否则返回 Optional 中包含的值。

  • 在这个特定的例子中,如果数组 arr 不为空,.max() 方法将返回一个 Optional 对象,其中包含数组中的最大值。如果数组为空,.max() 方法将返回一个空的 Optional 对象。接着,.orElse(0) 方法将被调用,如果 Optional 为空,则返回默认值 0。

整个表达式 Arrays.stream(arr).max().orElse(0) 的作用是:获取数组 arr 中的最大值,如果数组为空,则返回默认值 0。

2. 迷宫游戏【拓展】

在一个二维数组中,0 表示空地,1 表示墙壁,9 表示目标点。你的任务是从起始点 (0, 0)出发,判断是否能够到达目标点,不能斜着移动。

public class Work1002 {public static void main(String[] args) {int[][] arr = {{0, 0, 0, 0, 0},{1, 1, 0, 1, 0},{0, 0, 0, 0, 0},{0, 1, 1, 1, 1},{0, 0, 0, 0, 9}};boolean canReach = canReachTarget(arr);System.out.println(canReach ? "可以到达目标点" : "无法到达目标点");}public static boolean canReachTarget(int[][] maze) {int m = maze.length;    // 行数int n = maze[0].length; // 列数boolean[][] visited = new boolean[m][n]; // 标记数组,记录是否访问过return dfs(maze, 0, 0, visited);}private static boolean dfs(int[][] maze, int i, int j, boolean[][] visited) {if (i < 0 || i >= maze.length || j < 0 || j >= maze[0].length || maze[i][j] == 1 || visited[i][j]) {return false; // 越界、遇到墙壁或已经访问过的位置,返回false}if (maze[i][j] == 9) {System.out.println("到达目标点 (" + i + ", " + j + ")");return true;  // 找到目标点,返回true}visited[i][j] = true;  // 标记当前位置为已访问System.out.println("移动到位置 (" + i + ", " + j + ")");// 分别尝试上、下、左、右四个方向的移动boolean canReach = dfs(maze, i - 1, j, visited) ||dfs(maze, i + 1, j, visited) ||dfs(maze, i, j - 1, visited) ||dfs(maze, i, j + 1, visited);visited[i][j] = false;  // 回溯,取消当前位置的标记return canReach;}
}

3. 九宫格求和

一个二维数组,找出最小值,求以最小值为中心的九宫格的和,如果九宫格空缺,空缺位置用0补充。

public class Learn1001 {public static void main(String[] args) {int[][] arr = {{9, 10, 11, 12},{100, 20, 30, 40},{13, 14, 15, 16},{5, 6, 7, 10},};int n = arr.length;int m = arr[0].length;// 求最小值int[] index = new int[2];int min = arr[0][0];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr[i][j] < min){min = arr[i][j];index[0] = i;index[1] = j;}}}System.out.println(Arrays.toString(index));int sum = 0;for (int i = index[0] - 1; i <= index[0] + 1; i++) {for (int j = index[1] - 1; j <= index[1] + 1; j++) {if (i >=0 && i < n && j >= 0 && j < m) {sum += arr[i][j];} else {sum += 0;}}}System.out.println(sum);}
}

相关文章:

Java基础练习八(二维数组)

1.装水问题 有一个 异形 容器&#xff0c;用一个 n * n 的二维数组来表示。其中 1 表示容器实心部分&#xff0c; 0 表示空心部分。现使用此容器装水&#xff0c;能装多少水&#xff08;每个元素都表示一份水&#xff0c;只有有挡板的部分能装水&#xff09;&#xff1f; publi…...

Biopython序列比对

从InterPro网站&#xff08;https://www.ebi.ac.uk/interpro/download/Pfam/&#xff09;下载多序列比对文件Pfam-A.seed.gz&#xff08;含多个多序列比对&#xff09; ​wget https://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.seed.gz解压&#xff0c;取第一…...

无法坚持运动?解密肠道菌群影响运动积极性

谷禾健康 运动可以说是最有效和可行的生活方式因素&#xff0c;个人可以利用它来保护自己免受各种疾病的侵害&#xff0c;包括代谢性、心血管、神经退行性和肿瘤性疾病。 世界卫生组织建议&#xff0c;每周进行150-300分钟的中等强度运动。 运动的好处具体不用多说了&#xff0…...

4-5-tablewidget

文章目录 添加控件&#xff0c;添加行列数widget.cppwidget.h效果 添加控件&#xff0c;添加行列数 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this)…...

前端基础第一天-html-综合案例

通过综合案例&#xff0c;主要复习&#xff1a; 目录文件夹今日所学标签路径锚点链接 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…...

PDF Expert 3.3 for mac

PDF Expert是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点&#xff1a; PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动、旋转、缩放、裁…...

【腾讯云 Cloud Studio 实战训练营】深度体验 | 使用腾讯云 Cloud Studio 快速构建 Vue + Vite 完成律师 H5 页面

【腾讯云 Cloud Studio 实战训练营】深度体验 | 使用腾讯云 Cloud Studio 快速构建 Vue Vite 完成律师 H5 页面 写在前面的话一、腾讯云 Cloud Studio 介绍1.1 Cloud Studio 应用场景1.2 Cloud Studio 开发优势 二、沉浸式体验开发快速构建 H5 页面2.1 注册与登录 Cloud Studi…...

Word转PDF在线转换如何操作?分享转换技巧

现如今&#xff0c;pdf转换器已成为大家日常办公学习必不可少的工具&#xff0c;市场上的pdf转换器主要有两种类型&#xff0c;一种是需要下载安装的&#xff0c;另一种是网页版&#xff0c;打开就可以使用的&#xff0c;今天小编给大家推荐一个非常好用的网页版pdf转换器&…...

只需5步 真·双开电脑版微信

最近发现&#xff0c;有些小伙伴不仅有双开手机版微信的需求&#xff0c;同时也有电脑版的需求。 今天教大家一个方法&#xff0c;简单好用&#xff0c;只需要跟着图片操作&#xff0c;5步即可&#xff01;快一起来试试吧~ 1.下载安装ProcessExplorer 2.右键以管理员身份运行…...

如何将JSON字符串转化成对象

在这里只能使用ObjiectMapper这个类才能将Json字符串转成对象的格式进行输出 话不多说,直接上代码 实体类 //实体类 Setter Getter public class UserInfo implements Serializable {private Long id;private String name; //昵称private String phone; //手机转换代码 St…...

计算机网络 运输层 UDP和TCP对比

...

Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动该地区金融平等

流支付正在成为一种全新的支付形态&#xff0c;Zebec Protocol作为流支付的主要推崇者&#xff0c;正在积极的推动该支付方案向更广泛的应用场景拓展。目前&#xff0c;Zebec Protocol成功的将流支付应用在薪酬支付领域&#xff0c;并通过收购WageLink将其纳入旗下&#xff0c;…...

stm32项目(8)——基于stm32的智能家居设计

目录 一.功能设计 二.演示视频 三.硬件选择 1.单片机 2.红外遥控 3.红外探测模块 4.光敏电阻模块 5.温湿度检测模块 6.风扇模块 7.舵机 8.WIFI模块 9.LED和蜂鸣器 10.火焰传感器 11.气体传感器 四.程序设计 1.连线方式 2.注意事项 3.主程序代码 五.课题意义…...

边缘计算:连接智能世界的变革之力

随着物联网和人工智能的迅猛发展&#xff0c;边缘计算作为一种新兴的计算模式正受到越来越多的关注。边缘计算将数据处理和分析的能力从云端向网络的边缘推移&#xff0c;为各行各业带来了巨大的机遇和挑战。本文将探讨边缘计算的定义、应用领域以及对未来智能世界的影响。 1.…...

多货币多汇率跨境电子商城建设(仓储管理、网络安全)

多货币多汇率跨境电子商城建设需要考虑到多个方面&#xff0c;包括仓储管理、网络安全、货币兑换、物流配送等。以下是具体的介绍&#xff1a; 一、仓储管理 仓储管理是跨境电子商城的重要组成部分&#xff0c;需要考虑到商品的存储、管理和分拣等环节。以下是需要注意的几个…...

笔记,ubuntu22安装header问题

描述&#xff1a; 需要/lib/modules/5.15.0-53-generic 安装linux-headers-5.15.0-53-generic_5.15.0-53.59_20.04.1_amd64.deb提示 Package libssl1.1 is not installed.&#xff0c;机器上只有libssl3.0&#xff0c;最后强制安装&#xff0c;并且打了快照&#xff0c;防止重…...

领航优配:股票分红为什么股价下降?分红有什么好处?

股票分红是一种报答股东的方法&#xff0c;也是一种表现公司价值的方法。那么股票分红为什么股价下降&#xff1f;分红有什么优点&#xff1f;领航优配也为大家准备了相关内容&#xff0c;以供参考。 股票分红为什么股价下降&#xff1f; 股票进行分红后股价出现跌落是一种很常…...

Spark(38):Streaming DataFrame 和 Streaming DataSet 转换

目录 0. 相关文章链接 1. 基本操作 1.1. 弱类型 api 1.2. 强类型 1.3. 直接执行 sql 2. 基于 event-time 的窗口操作 2.1. event-time 窗口理解 2.2. event-time 窗口生成规则 3. 基于 Watermark 处理延迟数据 3.1. 什么是 Watermark 机制 3.2. update 模式下使用 w…...

设计模式之六:命令模式(封装调用)

命令模式可以将请求的对象和执行请求的对象解耦&#xff08;实际上是通过命令对象进行沟通&#xff0c;即解耦&#xff09;。&#xff08;个人感觉&#xff0c;这章讲的很一般&#xff09; 按个人理解来讲&#xff1a; 假如需要一个遥控器&#xff0c;遥控器有一个插口可以插上…...

git删除历史提交中的某些文件

要从所有提交中删除PDF文件并保留本地文件&#xff0c;你需要使用git filter-repo命令或git filter-branch命令来重写历史。请注意&#xff0c;这将修改提交历史&#xff0c;因此需要小心操作&#xff0c;确保在执行之前备份数据。 以下是使用git filter-repo命令的示例&#…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...