華為OD機試真題2024版-路口最短時間問題

題目描述

假定街道是棋盤型的,每格距離相等,車輛通過每格街道需要時間均為 timePerRoad;

街道的街口(交叉點)有交通燈,燈的周期 T(=lights[row][col]) 各不相同;

車輛可直行、左轉和右轉,其中直行和左轉需要等相應 T 時間的交通燈才可通行,右轉無需等待。

現給出 n*m 個街口的交通燈周期,以及起止街口的坐標,計算車輛經過兩個街口的最短時間。

其中:

1)起點和終點的交通燈不計入時間,且可以任意方向經過街口 不可超出 n*m 個街口,不可跳躍,但邊線也是道路(即 lights[0][0] -> lights[0][1] 是有效路徑)

入口函數定義:

/**
* lights : n*m 個街口每個交通燈的周期,值范圍[0,120],n 和 m 的范圍為[1,9]
* timePerRoad : 相鄰兩個街口之間街道的通過時間,范圍為[0,600]
* rowStart : 起點的行號
* colStart : 起點的列號
* rowEnd : 終點的行號
* colEnd : 終點的列號
* return : lights[rowStart][colStart] 與 lights[rowEnd][colEnd] 兩個街口之間的最短通行時間
*/
int calcTime(int[][] lights,int timePerRoad,int rowStart,int colStart,int rowEnd,int colEnd)

示例一

輸入

[[1,2,3],[4,5,6],[7,8,9]],60,0,0,2,2

輸出

245

說明

行走路線為 (0,0) -> (0,1) -> (1,1) -> (1,2) -> (2,2) 走了 4 格路,2 個右轉,1 個左轉,共耗時 60+0+60+5+60+0+60=245。

import java.util.*;public class Main {static final int MAX_SPEED = Integer.MAX_VALUE;enum Direction { UP, RIGHT, DOWN, LEFT };static class Point {int x, y, direction, speed;public Point(int x, int y, int direction, int speed) {this.x = x;this.y = y;this.direction = direction;this.speed = speed;}}static class Compare implements Comparator<Point> {public int compare(Point a, Point b) {return Integer.compare(a.speed, b.speed);}}static int calcTime(int[][] lights, int timePerRoad, int rowStart,int colStart, int rowEnd, int colEnd) {int[][][] result = new int[rowEnd + 1][colEnd + 1][4];for (int[][] row : result) {for (int[] col : row) {Arrays.fill(col, MAX_SPEED);}}PriorityQueue<Point> pq = new PriorityQueue<>(new Compare());for (int i = 0; i < 4; i++) {pq.add(new Point(rowStart, colStart, i, 0));}int[][] directions = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};while (!pq.isEmpty()) {Point p = pq.poll();if (p.speed > result[p.x][p.y][p.direction]) {continue;}for (int i = 0; i < 4; ++i) {int newDir = (p.direction + i) % 4;int newX = p.x + directions[newDir][0];int newY = p.y + directions[newDir][1];if (newX >= 0 && newX <= rowEnd && newY >= 0 && newY <= colEnd) {int newSpeed = p.speed + timePerRoad + (i != 1 ? lights[p.x][p.y] : 0);if (newSpeed < result[newX][newY][newDir]) {result[newX][newY][newDir] = newSpeed;pq.add(new Point(newX, newY, newDir, newSpeed));}}}}return Math.min(Math.min(result[rowEnd][colEnd][0], result[rowEnd][colEnd][1]),result[rowEnd][colEnd][2]);}public static void main(String[] args) {int[][] lights = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int timePerRoad = 60;int rowStart = 0;int colStart = 0;int rowEnd = 2;int colEnd = 2;System.out.println(calcTime(lights, timePerRoad, rowStart, colStart, rowEnd, colEnd));}
}

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

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

相關文章

企業網三層架構

企業網三層架構&#xff1a;是一種層次化模型設計&#xff0c;旨在將復雜的網絡設計分成三個層次&#xff0c;每個層次都著重于某些特定的功能&#xff0c;以提高效率和穩定性。 企業網三層架構層次&#xff1a; 接入層&#xff1a;使終端設備接入到網絡中來&#xff0c;提供…

Python爬蟲教程第二篇:進階技巧與實戰案例

Python爬蟲教程第二篇&#xff1a;進階技巧與實戰案例 在上一篇教程中&#xff0c;我們學習了Python爬蟲的基礎概念、基本流程以及一個簡單的入門實踐案例。本篇教程將帶領大家進一步探索Python爬蟲的進階技巧&#xff0c;并提供一個實戰案例&#xff0c;幫助大家提升爬蟲技能…

Android12 MultiMedia框架之GenericSource extractor

前面兩節學習到了各種Source的創建和extractor service的啟動&#xff0c;本節將以本地播放為例記錄下GenericSource是如何創建一個extractor的。extractor是在PrepareAsync()方法中被創建出來的&#xff0c;為了不過多贅述&#xff0c;我們直接從GenericSource的onPrepareAsyn…

Mojolicious命令行工具:自動化Web開發的瑞士軍刀

Mojolicious是一個高性能的、基于Perl的Web開發框架&#xff0c;它提供了一整套工具來簡化Web開發流程。其中&#xff0c;Mojolicious的命令行工具集是其強大功能的一部分&#xff0c;允許開發者快速生成項目模板、運行開發服務器、執行各種開發任務等。本文將詳細介紹Mojolici…

qt 自定義信號號槽 簡單舉例

在Qt中&#xff0c;自定義信號和槽是一種非常靈活的方式來處理對象之間的通信。以下是一個簡單的例子&#xff0c;展示了如何定義和使用自定義的信號和槽。 首先&#xff0c;我們定義一個名為MyClass的類&#xff0c;該類繼承自QObject&#xff0c;并聲明一個自定義信號和一個…

13_Shell系統函數

13_Shell系統函數和自定義函數 一、系統函數 basename 獲取文件名 #!/bin/bash#basename 相對路徑文件名 basename ./1.sh#basename 絕對路徑文件名 basename /tmp/1.sh#basename 去除文件后綴名 basename /tmp/1.sh .shdirname 獲取文件所在目錄名 #!/bin/bash#dirname 相對路…

Redis持久化RDB,AOF

目 錄 CONFIG動態修改配置 慢查詢 持久化 在上一篇主要對redis的了解入門&#xff0c;安裝&#xff0c;以及基礎配置&#xff0c;多實例的實現&#xff1a;redis的安裝看我上一篇&#xff1a; Redis安裝部署與使用,多實例 redis是擋在MySQL前面的&#xff0c;運行在內存…

Week 6-楊帆-學習總結

- 46 語義分割和數據集 語義分割概念 語義分割是一種計算機視覺任務&#xff0c;其目標是將圖像分割成屬于不同語義類別的區域。與目標檢測不同&#xff0c;語義分割關注的是像素級別的標注和預測&#xff0c;能夠識別并理解圖像中每一個像素的內容。這使得語義分割在理解圖像…

產品經理-研發流程-敏捷開發-迭代-需求評審及產品規劃(15)

敏捷開發是以用戶的需求進化為核心&#xff0c;采用迭代、循序漸進的方法進行軟件開發。 通俗來說&#xff0c;敏捷開發是一個軟件開發流程&#xff0c;是一個采用了迭代方法的開發流程 簡單來說&#xff0c;迭代就是把一個大產品拆分出一些最小的實現單位。完成不同的迭代就最…

機器學習筑基篇,Jupyter Notebook 精簡指南

[ 知識是人生的燈塔&#xff0c;只有不斷學習&#xff0c;才能照亮前行的道路 ] 0x00 Jupyter Notebook 簡明指南 描述&#xff1a;前面我們已經在機器學習工作站&#xff08;Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER&#xff09;中安裝 Anaconda 工具包&#xff0c;其…

老物件線上3D回憶展拓寬了藝術作品的展示空間和時間-深圳華銳視點

在數字技術的浪潮下&#xff0c;3D線上畫展為藝術家們開啟了一個全新的展示與銷售平臺。這一創新形式不僅拓寬了藝術作品的展示空間&#xff0c;還為廣大觀眾帶來了前所未有的觀賞體驗。 3D線上畫展制作以其獨特的互動性&#xff0c;讓藝術不再是單一的視覺享受。在這里&#x…

數據處理-Matplotlib 繪圖展示

文章目錄 1. Matplotlib 簡介2. 安裝3. Matplotlib Pyplot4. 繪制圖表1. 折線圖2. 散點圖3. 柱狀圖4. 餅圖5. 直方圖 5. 中文顯示 1. Matplotlib 簡介 Matplotlib 是 Python 的繪圖庫&#xff0c;它能讓使用者很輕松地將數據圖形化&#xff0c;并且提供多樣化的輸出格式。 Ma…

如何定義版本號--語義化版本

前言 版本號(version number)是版本的標識號。每一個操作系統&#xff08;或廣義的講&#xff0c;每一個軟件&#xff09;都有一個版本號。版本號能使用戶了解所使用的操作系統是否為最新的版本以及它所提供的功能與設施。 例如在Python項目依賴中會看到 requires-python &q…

zdppy+onlyoffice實現重命名文件的功能

參考文檔&#xff1a;https://api.onlyoffice.com/zh/editors/rename 步驟圖&#xff1a; 實現步驟&#xff1a; 用戶在 文檔編輯器中為文檔指定一個新名稱。 文檔編輯器 將文檔的新名稱通知給 文檔管理器。 文檔管理器 將文檔的新名稱發送到 文檔存儲服務&#xff0c;在這里…

使用jsencrypt在web前端對字符串進行Ras加密

話不多說&#xff0c;上代碼 實例代碼 下面方法&#xff0c;在網頁中先引入jsencrypt.min.js。然后調用ToEncrypt方法示例輸出加密&#xff0c;解密后的結果。 <script src"/js/jsencrypt.min.js"></script> //加密測試function ToEncrypt(){// 假設…

synchronized關鍵字詳解

文章目錄 synchronized使用示例實現原理鎖的升級synchronized與可見性synchronized與原子性synchronized與有序性 synchronized synchronized是Java提供的關鍵字譯為同步&#xff0c;是Java中用于實現線程同步的一種機制。它可以確保在同一時間只有一個線程能夠執行某段代碼&a…

【Python系列】數字的bool值

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

泌尿系統疾病病人的護理

一、泌尿系統疾病病人的一般護理要點 對于泌尿系統疾病的病人&#xff0c;護理是至關重要的。首先&#xff0c;要密切觀察病人的生命體征&#xff0c;包括體溫、脈搏、呼吸和血壓。 飲食方面&#xff0c;應根據病人的具體病情進行調整。例如&#xff0c;對于有水腫的病人&#…

js登陸驗證

當開始制作網頁時&#xff0c;就需要做一個判斷&#xff0c;不管在第幾頁進入&#xff0c;都要加一個登陸驗證&#xff0c;只有用戶有賬號&#xff0c;才能進入網頁&#xff0c;瀏覽網頁信息。下面就來看一下&#xff0c;使用JavaScript幾行代碼實現登陸驗證。 首先 登錄頁是i…

vue父組件樣式穿透修改子組件樣式

在 Vue 中&#xff0c;使用父組件樣式穿透到子組件通常不推薦&#xff0c;因為它破壞了樣式的作用域隔離&#xff0c;但如果你確實需要這樣做&#xff0c;可以使用深度選擇器。Vue 2 使用 ::v-deep&#xff0c;而 Vue 3 使用 /deep/ 或 ::v-deep 都可以。 以下是使用深度選擇器…