675. Cut Off Trees for Golf Event

这道题目最大的难点是理解题意。

文章目录

  • 题目理解

题目理解

输入:一个非负的二维数组
输出:一个最短距离
规则:数组中的元素如果是0,表示障碍,不能通过。如果是1,表示可以行走的地面。如果大于1表示树的高度,需要被砍了以后才能行走。
现在要求,每次都从(0,0)出发,按照树的高度从低到高砍树。把所有树都砍完的最短距离是多少。如果不能砍完所有的树,则返回-1。

[
[1,2,3],
[0,0,4],
[7,6,5]
]
以上面的数组为例。先对所有非0节点按照数值排序。这个例子中砍树的顺序应该是(0,0)->(0,1)->(0,2)->(1,2)->(2,2)->(2,1)->(2,0)。
那么先计算(0,0)到(0,0)的最短距离d1。
接着计算(0,0)到(0,1)的最短距离d2。
接着计算(0,1)到(0,2)的最短距离d3.

所有距离相加,就是最短距离。

计算两个点之间的最短距离,可以使用bfs。官方解答中还有a星算法。没想明白为什么那么做。
时间复杂度O((mnmn))。我们可能要计算mn个节点的最短路径,每个节点计算过程中又可能与m*n个节点有关系。

class Solution {private int[][] pos = new int[][]{{-1,0},{1,0},{0,-1},{0,1}};private int m;private int n;public int cutOffTree(List<List<Integer>> forest) {List<int[]> trees = new ArrayList<int[]>();m = forest.size();n = forest.get(0).size();for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(forest.get(i).get(j)>1){trees.add(new int[]{i,j,forest.get(i).get(j)});}}}Collections.sort(trees, new Comparator<int[]>() {public int compare(int[] o1, int[] o2) {return o1[2] - o2[2];}});int ans = 0, sr = 0,sc = 0;for(int[] tree : trees){int d = bfs(forest,sr,sc,tree[0],tree[1]);if(d<0) return -1;ans += d;sr = tree[0];sc = tree[1];}return ans;}private int bfs(List<List<Integer>> forest,int sr,int sc,int tr,int tc){Queue<int[]> queue = new ArrayDeque<int[]>();queue.offer(new int[]{sr,sc});boolean[][] seen = new boolean[m][n];seen[sr][sc] = true;int step = 0;while(!queue.isEmpty()){int size = queue.size();for(int k=0;k<size;k++){int[] array = queue.poll();sr = array[0];sc = array[1];if(sr == tr && sc == tc) return step;for(int i=0;i<4;i++){int nr = sr + pos[i][0];int nc = sc + pos[i][1];                   if(nr>=0 && nr<m && nc>=0 && nc<n && seen[nr][nc]==false && forest.get(nr).get(nc)>0){queue.offer(new int[]{nr,nc});seen[nr][nc]=true;}}}step++;}return -1;}
}

总结:我第一个没有想到的地方是可以先对树的高度排序。第二个没有想到的是按照从低到高走,找到每一步的最短路径,和就是总体最短路径。第三个没有想到的是在bfs过程中,我想判断条件forest.get(nr).get(nc)应该大于forest.get(sr).get(sc),这是因为我审题不清楚造成的误解。题目要求按照从低到高砍树,在从(sr,sc)到(tr,tc)过程中,只要节点值不为0 都可以通过,并不是说值>(sr,sc)的节点就不能走。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring学习(50):延迟加载

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

ansible的错误

错误 [rootbogon ansible]# ansible test -m ping 192.168.16.155 | FAILED! > { "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this hosts finger…

spring学习(51):对象的初始化和销毁

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

282. Expression Add Operators

目录题目理解分析第一步&#xff1a;dfs获得所有表达式第二步&#xff1a;计算结果先计算加减法计算乘法时间复杂度进一步优化题目理解 输入&#xff1a;一个字符串num&#xff0c;一个int target。输入num只包含数字。 规则&#xff1a;可以给num中包含的数字之间任务添加二目…

ubuntu下的对拍

开始用ubuntu祭blog 转载于:https://www.cnblogs.com/123789456ye/p/11094192.html

spring学习(52):工厂方法创建bean对象

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

花花酱leetcode 题目——搜索专题

在刷完极客时间的算法题目之后&#xff0c;偶然看到了花花酱关于leetcode进入千题时代的一些刷题看法。决定跟着他的思路继续刷题。 要刷多少题 1 每个类型 10-20 如何刷题 1 同类型题目一起刷 2 看代码很重要&#xff0c;看至少3-5种不同实现 3 第一遍&#xff1a;5分钟想…

P2058 海港

P2058 海港 题解 这道题就是给出你n艘船&#xff0c;让你看看以当前船停靠时间为截止时间&#xff0c;24h以内乘客来自多少不同的国家 一开始会想到来一艘船就记录下本船的到达时间&#xff0c;到达人数&#xff0c;以及乘客的国籍 但是你会发现这很占空间 而且船只进来的顺序都…

spring mvc学习(1):spring jar包

spring.jar是包含有完整发布的单个jar 包&#xff0c;spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容&#xff0c;因为只有在开发环境下才会用到 spring-mock.jar来进行辅助测试&#xff0c;正式应用系统中是用不得这些类的。 除了spring.jar文件&a…

花花酱leetcode 题目-二分搜索

原链接 IDNamedifficultysimilar Problemscomments35Search Insert Position234 94 781upper_bound33Search in Rotated Sorted Array381 153 154 162rotated/peak69Sqrt(x)

com.alibaba.fastjson.JSONObject cannot be cast to XXX异常解决

项目开发中遇到过几次这个问题&#xff0c;所以记录一下&#xff0c;代码如下&#xff1a; 1 PostMapping("/save-files") 2 public void addFiles(RequestBody List<AddFileRecordRequestDto> fileRecords) 3 { 4 LoginInfo loginInfosession…

spring mvc学习(2):spring jar包下载

jstl的jar包的下载 我们在使用spring框架的时候导入jstl标签库需要使用到jstl的jar包&#xff0c;假如没有加入到eclipse的lib目录下&#xff0c;使用alt /的时候不会有提示&#xff0c;所以我们需要把这个jar包加进来 首先登陆网址&#xff1a;http://tomcat.apache.org/ta…

EF框架学习(5)---EF中的在线和离线场景

EF中的持久性场景 使用EF实现实体持久化&#xff08;保存&#xff09;到数据库有两种情况&#xff1a;在线场景和离线场景。 1.在线场景 在线场景中&#xff0c;context是同一个上下文实例&#xff08;从DbContext派生&#xff09;&#xff0c;检索和保存实体都通过同一个conte…

spring mvc学习(3):建立第一个动态web项目

intellij idea创建第一个动态web项目 我以2018版的intellij idea为例 一.创建JavaWeb 1.第一步 点击左上角的File-->New-->Project 2.第二步 1.找到Java Enterprise之后&#xff0c;在Application Sever中找到自己的Tomcat&#xff0c;同时勾选中Web Application 2.…

Git:(1)简介

Git是一个开源的分布式版本控制系统&#xff0c;分布式相比集中式的最大区别是Git没有“中央服务器”&#xff0c;每位开发者都可以通过克隆&#xff08;git clone&#xff09;远程库&#xff0c;在本地机器上存储一个完整的Git仓库&#xff0c;还可以把代码的修改提交到本地库…

(专题二)01 矩阵的处理-特殊矩阵

有哪些特殊矩阵&#xff1f; 通用的特殊矩阵 zeros函数 &#xff1a;产生全0矩阵 产生五行五列的随机矩阵A&#xff0c;其值是10--99的整数 产生均值0.6&#xff0c;方差0.1的五行五列正态矩阵B 产生五阶单位阵 验证等式成立 ones函数 &#xff1a;产生全1矩阵 eye函数 &…

Git(2):安装和使用

Git安装和使用 刚开始用git的小白适用&#xff0c;&#xff0c;转自http://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中&#xff0c;我们经常会用一些版本控制器来托管自己的代码&#xff0c;今天就来总结下Git的相关用法&#xff0c;废话不多说&#xff0c;直接…

设计模式(二) 模板方法

模板方法模式——在一个抽象类中定义一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中去实现&#xff08;对应于我们根据自己的情况向模板填充内容&#xff09;。模板方法使得子类可以不改变一个算法的结构前提下&#xff0c;重新定义算法的某些特定步骤&#xff0c;…

33. Search in Rotated Sorted Array

文章目录题目二分解题81 Search in Rotated Sorted Array II题目 输入&#xff1a;一个按升序排序的数组nums&#xff0c;但是这个数组在某个位置被旋转了。(例如., 原始数组是[0,1,2,4,5,6,7]&#xff0c;旋转后就变成 [4,5,6,7,0,1,2])。第二个输入是一个int target。 输出&…

第七十期:2019年度Java开发者路线图

本文将向大家展示了一张Java开发者路线图。该路线图在保持简单可行的基础上&#xff0c;介绍了各种具有业界标准、且方便多数人遵循的工具和程序库。 作者&#xff1a;陈峻 许多Java开发人员都希望通过某种Java成长路线图&#xff0c;来解答有关&#xff1a;该学习哪些技术&am…