Leetcode每日一題學習訓練——Python3版(到達首都的最少油耗)

版本說明

當前版本號[20231205]。

版本修改說明
20231205初版

目錄

文章目錄

  • 版本說明
  • 目錄
  • 到達首都的最少油耗
    • 理解題目
    • 代碼思路
    • 參考代碼

原題可以點擊此 2477. 到達首都的最少油耗 前去練習。

到達首都的最少油耗

? 給你一棵 n 個節點的樹(一個無向、連通、無環圖),每個節點表示一個城市,編號從 0n - 1 ,且恰好有 n - 1 條路。0 是首都。給你一個二維整數數組 roads ,其中 roads[i] = [ai, bi] ,表示城市 aibi 之間有一條 雙向路

? 每個城市里有一個代表,他們都要去首都參加一個會議。

? 每座城市里有一輛車。給你一個整數 seats 表示每輛車里面座位的數目。

? 城市里的代表可以選擇乘坐所在城市的車,或者乘坐其他城市的車。相鄰城市之間一輛車的油耗是一升汽油。

? 請你返回到達首都最少需要多少升汽油。

示例 1:

img

輸入:roads = [[0,1],[0,2],[0,3]], seats = 5
輸出:3
解釋:
- 代表 1 直接到達首都,消耗 1 升汽油。
- 代表 2 直接到達首都,消耗 1 升汽油。
- 代表 3 直接到達首都,消耗 1 升汽油。
最少消耗 3 升汽油。

示例 2:

img

輸入:roads = [[3,1],[3,2],[1,0],[0,4],[0,5],[4,6]], seats = 2
輸出:7
解釋:
- 代表 2 到達城市 3 ,消耗 1 升汽油。
- 代表 2 和代表 3 一起到達城市 1 ,消耗 1 升汽油。
- 代表 2 和代表 3 一起到達首都,消耗 1 升汽油。
- 代表 1 直接到達首都,消耗 1 升汽油。
- 代表 5 直接到達首都,消耗 1 升汽油。
- 代表 6 到達城市 4 ,消耗 1 升汽油。
- 代表 4 和代表 6 一起到達首都,消耗 1 升汽油。
最少消耗 7 升汽油。

示例 3:

img

輸入:roads = [], seats = 1
輸出:0
解釋:沒有代表需要從別的城市到達首都。

提示:

  • 1 <= n <= 105
  • roads.length == n - 1
  • roads[i].length == 2
  • 0 <= ai, bi < n
  • ai != bi
  • roads 表示一棵合法的樹。
  • 1 <= seats <= 105

理解題目

  1. 這個問題可以使用圖的廣度優先搜索(BFS)算法來解決。
  2. 廣度優先搜索(BFS)算法是一種用于遍歷或搜索樹或圖的算法。它從根節點開始,然后訪問所有相鄰的節點,然后再訪問這些相鄰節點的相鄰節點,依此類推。
  3. 首先,我們需要創建一個鄰接表來表示城市之間的道路關系。
  4. 然后,從首都開始進行BFS搜索,每次搜索時,將當前城市的汽油消耗累加到總油耗中,并更新每個城市的汽油消耗。
  5. 最后,返回到達首都的總油耗。

代碼思路

  1. 它包含一個名為minimumFuelCost的方法,該方法接受兩個參數:roads和seats。**roads是一個二維列表,表示城市之間的道路關系;seats是一個整數,表示每輛車的座位數。**方法的目的是計算到達首都所需的最少汽油量。

    ? (該函數:minimumFuelCost是函數名;

    ? self是類實例的引用,表示這個函數是一個類的方法;

    ? (self, roads: List[List[int]], seats: int)是函數的參數列表,包括兩個參數:

    ? 一個是roads,類型為List[List[int]],表示一個二維整數列表

    ? 另一個是seats,類型為int,表示一個整數。

    ? -> int表示這個函數的返回值類型是整數。)

     def minimumFuelCost(self, roads: List[List[int]], seats: int) -> int:
    
  2. 首先,代碼創建了一個名為g的空列表,用于存儲道路關系。然后,遍歷roads列表,將每個城市的鄰居添加到g中。

    [[] for i in range(len(roads) + 1)]表示創建一個長度為len(roads) + 1的列表;

    ? 其中每個元素都是一個空列表。

    ? 這樣做的目的是為了讓每個節點都有一個與之對應的鄰接表,

    ? 方便后續進行圖的遍歷和操作。)

       # 創建一個空的鄰接表g,用于存儲道路關系g = [[] for i in range(len(roads) + 1)]for e in roads:# 將道路的兩個端點添加到對方的鄰接表中g[e[0]].append(e[1])g[e[1]].append(e[0])res = 0  # 初始化結果變量為0
    
  3. 接下來,定義了一個名為dfs的內部函數,用于深度優先搜索。這個函數接受兩個參數:**cur表示當前城市,fa表示當前城市的父節點。**在dfs函數中,首先初始化一個名為peopleSum的變量,表示當前城市及其代表的人數之和。

            def dfs(cur, fa):nonlocal res  # 聲明res為非局部變量,以便在dfs函數中修改它peopleSum = 1  # 初始化當前節點的人數為1
    
  4. 然后,遍歷當前城市的代表,如果代表不是父節點,則遞歸調用dfs函數,并將返回的人數累加到peopleSum中。同時,更新res變量,將其加上(peopleCnt + seats - 1) // seats的結果。最后,返回peopleSum。

     for ne in g[cur]:  # 遍歷當前節點的所有代表if ne != fa:  # 如果代表不是父節點peopleCnt = dfs(ne, cur)  # 遞歸調用dfs函數,計算代表的人數peopleSum += peopleCnt  # 累加代表的人數到當前節點的人數res += (peopleCnt + seats - 1) // seats  # 更新結果變量,計算所需的汽油量return peopleSum  # 返回當前節點的人數
    
  5. 在主函數中,調用dfs函數,傳入初始值0和-1。最后,返回res作為結果。

         dfs(0, -1)  # 從根節點開始調用dfs函數return res  # 返回結果變量

參考代碼

class Solution:def minimumFuelCost(self, roads: List[List[int]], seats: int) -> int:g = [[] for i in range(len(roads) + 1)]for e in roads:g[e[0]].append(e[1])g[e[1]].append(e[0])res = 0def dfs(cur, fa):nonlocal respeopleSum = 1 for ne in g[cur]:if ne != fa:peopleCnt = dfs(ne, cur)peopleSum += peopleCntres += (peopleCnt + seats - 1) // seatsreturn peopleSumdfs(0, -1)return res

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

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

相關文章

倒計時模塊復習

經典回顧倒計時 倒計時的基本布局介紹。 一個內容區域和一個輸入區域&#xff0c;內容區域進行劃分 直接使用flex布局會更快一點。 js代碼 我們利用一下模塊化思想&#xff0c;直接把獲得時間這個功能寫成一個函數。方便后續的調用 function getTime() {const date new Date…

MES管理系統通過哪些方面提升產品質量管理水平

在當今高度競爭的市場環境中&#xff0c;質量成為了企業生存和發展的關鍵因素。工廠作為生產產品的核心場所&#xff0c;其質量管理水平直接影響到產品的質量和企業的聲譽。為了應對這一挑戰&#xff0c;許多工廠引入了MES管理系統解決方案。本文將探討MES管理系統如何幫助工廠…

【UE5】監控攝像頭效果(上)

目錄 效果 步驟 一、視角切換 二、攝像頭畫面后期處理 三、在場景中顯示攝像頭畫面 效果 步驟 一、視角切換 1. 新建一個Basic關卡&#xff0c;添加第三人稱游戲資源到項目瀏覽器 2. 新建一個Actor藍圖&#xff0c;這里命名為“BP_SecurityCamera” 打開“BP_Securit…

模電筆記。。。。

模電 2.8 蜂鳴器 按照蜂鳴器驅動方式分為有源蜂鳴器和無源蜂鳴器 有源的有自己的震蕩電路&#xff0c;無源的要寫代碼控制。 里面有個線圈&#xff0c;相當于電感&#xff0c;儲能&#xff0c;通直隔交。 蜂鳴器的參數&#xff1a;額定電壓&#xff0c;工作電壓&#xff0…

【CCF-B】1/2區,錄用見刊極快!2個月錄用!

計算機類 ? 好刊解讀 今天小編帶來Taylor and Francis旗下計算機領域快刊&#xff0c;CCF-B類推薦的期刊解讀&#xff0c;期刊審稿周期短&#xff0c;投稿友好&#xff0c;如您有投稿需求&#xff0c;可作為重點關注&#xff01;后文有相關領域真實發表案例&#xff0c;供您投…

防水,也不怕水。Mate X5是如何做到讓你濕手濕屏也不影響操作的?

相信不少人都碰到過當手機屏幕存在小水珠時&#xff0c;觸控變得不靈敏&#xff0c;或者出現“幽靈觸屏”&#xff0c;指東打西的情況。 尤其是在洗澡、做飯&#xff0c;或者在戶外遇到下雨天氣時&#xff0c;如果打濕的手機收到重要聊天消息或者電話&#xff0c;卻因為濕屏導…

TS學習——面向對象

面向對象是程序中一個非常重要的思想&#xff0c;它被很多同學理解成了一個比較難&#xff0c;比較深奧的問題&#xff0c;其實不然。面向對象很簡單&#xff0c;簡而言之就是程序之中所有的操作都需要通過對象來完成。 舉例來說&#xff1a; 操作瀏覽器要使用window對象操作網…

生成fip.bin在Milkv-duo上跑rtthread的相關嘗試,及其問題分析

前言 &#xff08;1&#xff09;PLCT實驗室實習生長期招聘&#xff1a;招聘信息鏈接 &#xff08;2&#xff09;本來是想在Milkv-duo上跑rtthread的&#xff0c;做了很多努力&#xff0c;一直沒有結果。雖然不知道最終能不能成功做出來&#xff0c;還是把自己的相關努力分享出來…

MDK官網如何下載stm32支持包

網站&#xff1a;https://www.keil.com/demo/eval/arm.htm 1 2 3點這個下載

基于Mint Mate 21.2 Victoria 的Anjuta安裝與測試

序言 Linux mint mate 21.2 命名為 victoria 版&#xff0c;在vmware虛擬機中安裝按提示默認安裝即可&#xff0c;不做更多記錄。mint mate的優點是穩定&#xff0c;窗口質感好。安裝完成后&#xff0c;需要關注一些常用功能配置。主要有&#xff1a;顯示器調整、桌面調整、工…

當然熱門的原創改寫改寫大全【2023最新】

在信息時代&#xff0c;隨著科技的不斷發展&#xff0c;改寫軟件逐漸成為提高文案質量和寫作效率的重要工具。本文將專心分享一些好用的改寫軟件&#xff0c;其中包括百度文心一言智能寫作以及147SEO改寫軟件。這些工具不僅支持批量改寫&#xff0c;而且在發布到各大平臺后能夠…

python爬取 HTTP_2 網站超時問題的解決方案

問題背景 在進行網絡數據爬取時&#xff0c;使用 Python 程序訪問支持 HTTP/2 協議的網站時&#xff0c;有時會遇到超時問題。這可能會導致數據獲取不完整&#xff0c;影響爬蟲程序的正常運行。 問題描述 在實際操作中&#xff0c;當使用 Python 編寫的爬蟲程序訪問支持 HTT…

使用高防IP防護有哪些優勢

高防IP是針對互聯網服務器在遭受大流量的DDoS攻擊后導致服務不可用的情況下&#xff0c;推出的付費增值服務&#xff0c;用戶可以通過配置高防IP&#xff0c;將攻擊流量引流到高防IP&#xff0c;確保源站的穩定可靠。高防IP相當于搭建完轉發的服務器。 高防IP有兩種接入方式&a…

Notepad安裝

中文免安裝版&#xff0c;下載解壓即可。 NotepadV7.5.6 (訪問密碼: 1666)https://url48.ctfile.com/f/33868548-986668939-7a3316?p1666

Node-RED 設置登錄權限

Node-RED 提供了內置的 “adminAuth” 功能&#xff0c;使你能夠通過用戶名和密碼來保護對 Node-RED 編輯器的訪問。本文將向你展示如何配置登錄權限&#xff0c;以及一些相關的最佳實踐。以下是設置登錄權限的步驟&#xff1a; 步驟一&#xff1a;配置 AdminAuth 在 Node-RE…

react Hooks實現原理

Fiber 上篇文章fiber簡單理解記錄了react fiber架構&#xff0c;Hooks是基于fiber鏈表來實現的。閱讀以下內容時建議先了解react fiber。 jsx -> render function -> vdom -> fiber樹 -> dom vdom 轉 fiber 的過程稱為 recocile。diff算法就是在recocile這個過程…

LVS-DR+Keepalived+動靜分離實驗

架構圖 解釋一下架構&#xff0c;大概就是用Keepalived實現兩臺DR服務器的LVS負載均衡&#xff0c;然后后端服務器是兩臺Nginx服務器兩臺Tomcat服務器并且實現動靜分離這個實驗其實就是把 LVS-DRKeepalived 和 動靜分離 給拼起來&#xff0c;真的是拼起來&#xff0c;兩個部分…

在SQLServer中,把一個表的字段更新到另一個表中

在SQLServer中&#xff0c;把一個表的字段更新到另一個表中&#xff0c;應該如何實現? 你可以使用 UPDATE 語句結合 JOIN 來將一個表中的字段更新到另一個表中。假設你有兩個表&#xff0c;稱為 table1 和 table2&#xff0c;你想從 table1 中更新 table2&#xff0c;可以像這…

Rtrofit+Rxjava網絡請求封裝

好幾年前封裝的框架一直沒上傳&#xff0c;趁現在升級寫下。 簡介Retrofit是android的網絡請求庫&#xff0c;是一個RESTful的HTTP網絡請求框架的封裝&#xff08;基于okhttp&#xff09;。它內部網絡請求的工作&#xff0c;本質上是通過OkHttp完成&#xff0c;而Retrofit僅負責…

JVM虛擬機:執行Java程序并指定JVM參數

本文重點 在前面我們設置參數值的時候&#xff0c;需要在eclipse中的VM中進行參數設置&#xff0c;查詢的時候需要先jps&#xff0c;然后jinfo。這里嘗試動態的設置和查詢&#xff0c;也就是說在運行程序的時候就對其進行設置&#xff0c;并且進行查詢。 過程 為了確定參數修…