leetcode 1631. 最小體力消耗路徑(并查集)

你準備參加一場遠足活動。給你一個二維 rows x columns 的地圖 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一開始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下標從 0 開始編號)。你每次可以往 上,下,左,右 四個方向之一移動,你想要找到耗費 體力 最小的一條路徑。

一條路徑耗費的 體力值 是路徑上相鄰格子之間 高度差絕對值 的 最大值 決定的。

請你返回從左上角走到右下角的最小 體力消耗值 。

示例 1:

輸入:heights = [[1,2,2],[3,8,2],[5,3,5]]
輸出:2
解釋:路徑 [1,3,5,3,5] 連續格子的差值絕對值最大為 2 。
這條路徑比路徑 [1,2,2,2,5] 更優,因為另一條路徑差值最大值為 3 。

代碼

class Solution {class  edge{int x,x1,len;public edge(int x, int x1, int len) {this.x = x;this.x1 = x1;this.len = len;}}int[] fa;public void  init(){for(int i=0;i<fa.length;i++)fa[i]=i;}public int  find(int x){if(x!=fa[x])fa[x]=find(fa[x]);return fa[x];}public void   union(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[x]=y;}public int minimumEffortPath(int[][] heights) {PriorityQueue<edge> priorityQueue=new PriorityQueue<>((o1, o2) -> o1.len-o2.len);int r=heights.length,c=heights[0].length;for(int i=0;i<r;i++)//將相鄰的格子高度差作為邊的權重for(int j=0;j<c;j++){int cur=i*c+j;if(i<r-1){priorityQueue.add(new edge(cur,cur+c, Math.abs(heights[i][j]-heights[i+1][j])));}if(j<c-1){priorityQueue.add(new edge(cur,cur+1, Math.abs(heights[i][j]-heights[i][j+1])));}}fa=new int[r*c];init();while (!priorityQueue.isEmpty())//不斷的加入權重小的邊,直到起點和終點連通{edge cur=priorityQueue.poll();union(cur.x,cur.x1);if(find(0)==find(r*c-1))return cur.len;}return 0;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392222.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

netflix_Netflix的Polynote

netflixNetflix open source Polynote is a new notebook environment and was born out of the necessity to accelerate data science experimentation at Netflix.Netflix開源Polynote是一種新的筆記本環境&#xff0c;其誕生是出于加速Netflix數據科學實驗的需要。 Over t…

Django-內置用戶系統

Django自帶的用戶認證 我們在開發一個網站的時候&#xff0c;無可避免的需要設計實現網站的用戶系統。此時我們需要實現包括 1.用戶注冊 2.用戶登錄 3.用戶認證 4.注銷 5.修改密碼 Django作為一個完美主義者的終極框架&#xff0c;當然也會想到用戶的這些痛點。它內置了強大的用…

React 與 可視化

一般會想到 canvas 和 svg ; svg更適合畫圖, 但由于cavans在移動端的良好兼容性, 使用的更廣; 什么是svg, scalable vector graphics 全稱 可縮放矢量圖形, 是一種來描述二維矢量圖形的xml語言 canvas 能做的 svg基本都可以做, 字體圖標, icon, logo 也能作 在ie上也是從ie9開…

css 跳動的心_如何用純CSS為您的情人打造一顆跳動的心

css 跳動的心Each year on February 14th, many people exchange cards, candies, gifts or flowers with their special “valentine”. The day of romance we call Valentine’s Day is named for a Christian martyr and dates back to the 5th century, but has origins i…

oracle怎么獲取行,在oracle中如何實現SELECT TOP N取得前幾行記錄

在sql server中可以通過SELECT TOP N來取得想要結果的前幾行的信息。但是在oracle中必須借助偽列rownum來完成一個查詢語句在取得結果集后&#xff0c;偽列rownum就會從1開始&#xff0c;從上往下依次遞增。rownum是對結果集的編序排列。例如下表&#xff1a;SQL> select id…

圖片管理程序(Java)

圖片管理程序 gitee完整代碼下載 github完整代碼下載 華南農業大學課程設計作品&#xff08;99分&#xff09; 問題描述 題目目的是編寫一個能夠對數字像片進行管理的應用程序。 程序能夠顯示的圖片格式包括,.JPG、.JPEG、.GIF、.PNG、和.BMP。 圖像文件尺寸,要求能夠處理從…

氣流與路易吉,阿戈,MLFlow,KubeFlow

任務編排工具和工作流程 (Task orchestration tools and workflows) Recently there’s been an explosion of new tools for orchestrating task- and data workflows (sometimes referred to as “MLOps”). The quantity of these tools can make it hard to choose which o…

移動WEB開發之JS內置touch事件[轉]

iOS上的Safari也支持click 和mouseover等傳統的交互事件&#xff0c;只是不推薦在iOS的瀏覽器應用上使用click和mouseover&#xff0c;因為這兩個事件是為了支持鼠標點擊而設計 出來的。Click事件在iOS上會有半秒左右的延遲&#xff0c;原因是iOS要highlight接收到click的eleme…

編寫代碼的軟件用什么編寫的_如何通過像編寫代碼一樣克服對編寫的恐懼

編寫代碼的軟件用什么編寫的by Chris Rowe通過克里斯羅 How often do you get the fear? What do I mean by fear? How about the knot I got in my stomach just before I plunged out of plane on a parachute jump? It’s more than the brain logically planning to av…

快速學習一個新的模塊

1、模塊名.__doc__查看函數簡介&#xff0c;為了便于查看&#xff0c;采用print&#xff08;模塊名.__doc__&#xff09;打印出來&#xff0c;這樣的格式便于查看。 2、采用內置方法dir()查看模塊的變量、函數、類等等&#xff1b;采用"模塊名.__all__"查看模塊中提供…

php 公鑰格式轉換,如何把OpenSSH公鑰轉換成OpenSSL格式

《如何把OpenSSH公鑰轉換成OpenSSL格式》要點&#xff1a;本文介紹了如何把OpenSSH公鑰轉換成OpenSSL格式&#xff0c;希望對您有用。如果有疑問&#xff0c;可以聯系我們。首先看看OpenSSL工具的簡單使用方法,我們以rsa加密算法為例生成一個私鑰&#xff1a;openssl genrsa -o…

模擬操作系統(Java)

gitee完整代碼下載 github完整代碼下載 一、 需求分析 模擬一個采用多道程序設計方法的單用戶操作系統&#xff0c;該操作系統包括進程管理、存儲管理、設備管理、文件管理和用戶接口四部分。預計程序所能達到的功能&#xff1a; 進程管理模擬&#xff1a;實現操作系統進程管…

數據庫面試復習_數據科學面試復習

數據庫面試復習大面試前先刷新 (REFRESH BEFORE THE BIG INTERVIEW) 介紹 (Introduction) I crafted this study guide from multiple sources to make it as comprehensive as possible. This guide helped me prepare for both the technical and behavioral aspects of the …

hibernate緩存

&#xff08;轉自&#xff1a;http://www.cnblogs.com/java-class/p/6108175.html&#xff09; 閱讀目錄 1. 為什么要用 Hibernate 緩存&#xff1f;2. 項目實戰3. Hibernate 緩存原理回到頂部1. 為什么要用 Hibernate 緩存&#xff1f; Hibernate是一個持久層框架&#xff0c;…

oracle 連接greenplum,Oracle通過DBLINK訪問GreenPlum

為多個數據庫之間的整合和遷移做POC&#xff0c;嘗試使用Oracle Gateway和Heterogeneous Service來中轉訪問&#xff0c;測試過好多次&#xff0c;最終發現只有在32位的Oracle當中才能成功配置。 配置環境如下&#xff1a; Windows 2003 32bit 或 Windows 2008 64bit Oracle10G…

如何使用React和Redux前端創建Rails項目

by Mark Hopson馬克霍普森(Mark Hopson) 如何使用React和Redux前端(加上Typescript&#xff01;)創建Rails項目 (How to create a Rails project with a React and Redux front-end (plus Typescript!)) 在Rails項目中使用React和Redux設置單頁Javascript App的完整指南。 (A …

分布與并行計算—用任務管理器畫CPU正弦曲線(Java)

class drawSin implements Runnable{Overridepublic void run() {final double SPLIT 0.01;// 角度的分割final int COUNT (int) (2 / SPLIT);// 2PI分割的次數&#xff0c;也就是2/0.01個&#xff0c;正好是一周final double PI Math.PI;final int interval 100;// 時間間…

Rails文件上傳file_field報錯Encoding::UndefinedConversionError

服務器用的是ubuntu12 64bit&#xff0c;環境是ruby1.9.3rails3mysql&#xff0c;測試是在windows2003上。 上傳一個【.gitconfig】文件&#xff0c;沒有問題&#xff0c;上傳【新浪微博數據挖掘.pdf】報錯&#xff0c;上傳【back.jpg】報錯。 下面是兩段信息&#xff0c;是從【…

好久不來這里寫東西了.

我正準備離開學校去實現自己的目標,很清楚自己在學校的... ...做共享程序員,就不得不考慮些商業上的東西,自己要吃飯啊!我想我是該好好的處理一下這二者的關系. 轉載于:https://www.cnblogs.com/wangxiang/archive/2007/01/01/609714.html

Asp.net mvc中使用配置Unity

第一步&#xff1a;添加unity.mvc 第二步&#xff1a;在添加之后會在app_start中生成UnityConfig.cs&#xff0c;UnityMvcActivator.cs 第三步&#xff1a;使用 第四步&#xff1a;效果展示 轉載于:https://www.cnblogs.com/WJ--NET/p/7117839.html