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

【华为OD题库-010】寻找矿堆的最大价值-Java

题目

给你一个由0(空地)、1(银矿)、2(金矿)组成的的地图,矿堆只能由上下左右相邻的金矿或银矿连接形成。超出地图范围可以认为是空地。
假设银矿价值1,金矿价值2,请你找出地图中最大价值的矿堆并输出该矿堆的价值
输入描述
地图元素信息如:
22220
00000
00000
11111
地图范围最大300*300
0<=地图元素<=2
输出描述:
矿堆的最大价值
示例1
输入:
22220
00000
00000
01111
输出:
8
示例2
输入:
22220
00020
00010
01111
输出:
15
示例3
输入:
20000
00120
00000
00111
输出:
3

思路

遍历矿堆,如果当前值不等于0(等于1或等于2),那么从当前值计算,所有相邻的总价值是多少?
将本轮遍历产生的总价值和上次的总价值比较,得到较大值
遍历完成后,就能得到矿堆的最大价值
问题的关键在于怎么求所有相邻的总价值?根据题目描述,总价值等于=当前值+上总价值+下总价值+左总价值+右总价值。
设计 dfs(grid,i,j)函数,grid是一个二维数组,表示矿堆,(i,j)代表开始计算位置。
定义递归终止条件:如果i,j超出数组范围或者grid[i][j]==0,那么 直接返回0
定义结果res的初始值:res=grid[i][j]
递归计算与当前位置的相邻(上下左右四个位置)位置的累加价值,用res加上相邻的值
最后返回res即可

题解

package hwod;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class FindKMaxVal {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<String> list = new ArrayList<>();while (sc.hasNextLine()) {String line = sc.nextLine();if ("".equals(line)) break;list.add(line);}int n = list.size();int[][] pile = new int[n][list.get(0).length()];//字符数组转整形数组for (int i = 0; i < n; i++) {String line = list.get(i);for (int j = 0; j < line.length(); j++) {pile[i][j] = line.charAt(j) - '0';}}System.out.println(findMaxVal(pile));}private static int findMaxVal(int[][] pile) {int m = pile.length;int res = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < pile[i].length; j++) {if (pile[i][j] == 1 || pile[i][j] == 2) {int cur = dfs(i, j, pile);res = Math.max(res, cur);}}}return res;}private static int dfs(int i, int j, int[][] pile) {int m = pile.length, n = pile[0].length;if (i >= m || j >= n || i < 0 || j < 0 || (pile[i][j] != 1 && pile[i][j] != 2)) return 0;int res = pile[i][j];pile[i][j] = 0;res += dfs(i + 1, j, pile) + dfs(i, j + 1, pile) + dfs(i - 1, j, pile) + dfs(i, j - 1, pile);return res;}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

http://www.lryc.cn/news/229409.html

相关文章:

  • 在PyTorch中使用CUDA, pytorch与cuda不同版本对应安装指南,查看CUDA版本,安装对应版本pytorch
  • copilot 产生 python工具函数并生成单元测试
  • 缓存与数据库双写一致性几种策略分析
  • Spring全家桶源码解析--2.6 Spring scope 限制bean的作用范围
  • python 文本纠错库pycorrector的使用(API变更,许多介绍文章已不可用)
  • 【C++初阶(七)】类和对象(下)
  • Linux上C++通过LDAP协议使用kerberos认证AES加密连接到AD服务器
  • 开源供应链管理系统 多供应商批发管理系统方案及源码输出
  • 2yocto 自启动程序(服务)
  • AI 绘画 | Stable Diffusion 进阶 Embeddings(词嵌入)、LoRa(低秩适应模型)、Hypernetwork(超网络)
  • 【汇编】计算机的组成
  • asp.net学生宿舍管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • [C++]Leetcode17电话号码的字母组合
  • OpenBMC Uboot下使用TFTP升级系统
  • 巨量千川「全域推广」指南来袭!助力商家开拓新流量
  • 视频剪辑助手:轻松实现视频随机分割并提取音频保存
  • java注解的作用
  • css中的hover用法示例(可以在vue中制作鼠标悬停显示摸个按钮的效果)
  • labview实现仪器的控制visa
  • 说说React Router有几种模式?实现原理?
  • laravel5+版本aes128加解密
  • Spark的转换算子和操作算子
  • 传奇手游天花板赤月【盛世遮天】【可做底版】服务端+自主授权+详细教程
  • TP触摸屏调试
  • 11-13 spring整合web
  • 基于C#开发的任天堂 Switch 开源模拟器
  • 做一个Sprngboot文件上传-阿里云
  • k8s ----对外暴露
  • 每日一题(LeetCode)----数组--长度最小的子数组
  • TCP与UDP