Leetcode+JAVA+貪心III

134.加油站

在一條環路上有?n?個加油站,其中第?i?個加油站有汽油?gas[i]?升。

你有一輛油箱容量無限的的汽車,從第?i?個加油站開往第?i+1?個加油站需要消耗汽油?cost[i]?升。你從其中的一個加油站出發,開始時油箱為空。

給定兩個整數數組?gas?和?cost?,如果你可以按順序繞環路行駛一周,則返回出發時加油站的編號,否則返回?-1?。如果存在解,則?保證?它是?唯一?的。

示例?1:

輸入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
輸出: 3
解釋:
從 3 號加油站(索引為 3 處)出發,可獲得 4 升汽油。此時油箱有 = 0 + 4 = 4 升汽油
開往 4 號加油站,此時油箱有 4 - 1 + 5 = 8 升汽油
開往 0 號加油站,此時油箱有 8 - 2 + 1 = 7 升汽油
開往 1 號加油站,此時油箱有 7 - 3 + 2 = 6 升汽油
開往 2 號加油站,此時油箱有 6 - 4 + 3 = 5 升汽油
開往 3 號加油站,你需要消耗 5 升汽油,正好足夠你返回到 3 號加油站。
因此,3 可為起始索引。

示例 2:

輸入: gas = [2,3,4], cost = [3,4,3]
輸出: -1
解釋:
你不能從 0 號或 1 號加油站出發,因為沒有足夠的汽油可以讓你行駛到下一個加油站。
我們從 2 號加油站出發,可以獲得 4 升汽油。 此時油箱有 = 0 + 4 = 4 升汽油
開往 0 號加油站,此時油箱有 4 - 3 + 2 = 3 升汽油
開往 1 號加油站,此時油箱有 3 - 3 + 3 = 3 升汽油
你無法返回 2 號加油站,因為返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
因此,無論怎樣,你都不可能繞環路行駛一周。

提示:

  • n == gas.length == cost.length
  • 1 <= n <= 105
  • 0 <= gas[i], cost[i] <= 104
  • 輸入保證答案唯一。

解題思路

問題核心

  • 有 n 個加油站,gas[i] 表示第 i 個加油站可加的油量,cost[i] 表示從第 i 到第 i+1 個加油站的耗油量。
  • 油箱容量無限,初始為空,需找到一個起始站,使得汽車能繞環路一周(回到起點,油量非負)。
  • 如果存在解,答案唯一;否則返回 -1。

貪心策略

  1. 凈油量計算
    • 對于每個加油站,計算凈油量 res[i] = gas[i] - cost[i],表示在站 i 加完油并開往下一站后的油量變化。
    • 如果總凈油量 sum(res[i]) < 0,無法繞一周,返回 -1(因為總油量不足以覆蓋總消耗)。
  2. 起始點選擇
    • 使用 currSum 跟蹤從某個起始點開始的累計凈油量。
    • 如果在某個點 i,currSum < 0,說明從當前起始點 start 到 i 的路徑不可行,重置 start = i + 1,并清零 currSum。
    • 繼續遍歷,直到檢查所有站。
  3. 為什么貪心有效
    • 總油量檢查:如果 sum(res[i]) >= 0,存在至少一個解(題目保證唯一)。
    • 局部失敗處理:如果從某個起點 start 到 i 的 currSum < 0,則 start 到 i 之間的任何點都不能作為起點(因為油量會更早變負)。
    • 唯一解:題目保證如果解存在,則唯一。貪心算法通過排除不可行起點,找到唯一可行起點。
  4. 環形處理
    • 環形路徑通過數組循環模擬(i+1 模 n),但你的代碼通過單次遍歷和總和檢查隱式處理環形約束。

時間復雜度

  • 單遍遍歷數組:O(n),其中 n 是 gas.length。
  • 空間復雜度:O(n)(用于 res 數組),可優化為 O(1)(直接用 gas[i] - cost[i])。

代碼?

import java.util.*;class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {// 創建凈油量數組,res[i] = gas[i] - cost[i]int[] res = new int[gas.length];// sum 記錄總凈油量,currSum 記錄當前路徑的凈油量int sum = 0, currSum = 0;// start 記錄潛在的起始加油站索引int start = 0;// 遍歷所有加油站for (int i = 0; i < res.length; i++) {// 計算第 i 個加油站的凈油量res[i] = gas[i] - cost[i];// 更新總凈油量sum += res[i];// 更新當前路徑凈油量currSum += res[i];// 如果當前路徑油量為負,當前起點不可行if (currSum < 0) {currSum = 0; // 重置當前路徑油量start = i + 1; // 將起點移到下一個加油站}}// 如果總凈油量 < 0,無法繞一周if (sum < 0) {return -1;}// 返回唯一可行起點(或 -1 如果 start 越界)return start;}
}

135.分發糖果

n?個孩子站成一排。給你一個整數數組?ratings?表示每個孩子的評分。

你需要按照以下要求,給這些孩子分發糖果:

  • 每個孩子至少分配到?1?個糖果。
  • 相鄰兩個孩子評分更高的孩子會獲得更多的糖果。

請你給每個孩子分發糖果,計算并返回需要準備的?最少糖果數目?。

示例?1:

輸入:ratings = [1,0,2]
輸出:5
解釋:你可以分別給第一個、第二個、第三個孩子分發 2、1、2 顆糖果。

示例?2:

輸入:ratings = [1,2,2]
輸出:4
解釋:你可以分別給第一個、第二個、第三個孩子分發 1、2、1 顆糖果。第三個孩子只得到 1 顆糖果,這滿足題面中的兩個條件。

提示:

  • n == ratings.length
  • 1 <= n <= 2 * 104
  • 0 <= ratings[i] <= 2 * 104

解題思路

問題核心

  • 給定數組 ratings,ratings[i] 表示第 i 個孩子的評分。
  • 分配規則:
    • 每個孩子至少 1 顆糖果。
    • 如果 ratings[i] > ratings[i-1],第 i 個孩子比第 i-1 個孩子多拿糖果。
    • 如果 ratings[i] > ratings[i+1],第 i 個孩子比第 i+1 個孩子多拿糖果。
  • 目標:最小化總糖果數。

貪心策略

  1. 初始化
    • 為每個孩子分配 1 顆糖果(滿足“至少 1 顆”)。
  2. 兩次遍歷
    • 從左到右:處理評分遞增的情況。如果 ratings[i] > ratings[i-1],則 candies[i] = candies[i-1] + 1,確保左邊鄰居規則。
    • 從右到左:處理評分遞減的情況。如果 ratings[i] > ratings[i+1],則 candies[i] = max(candies[i], candies[i+1] + 1),確保右邊鄰居規則,并保留左遍歷結果的最大值。
  3. 求和:累加 candies 數組,得到最小糖果數。
  4. 為什么貪心有效
    • 左遍歷確保評分遞增時糖果數遞增,滿足左側約束。
    • 右遍歷修正評分遞減的情況,確保右側約束,同時取最大值避免破壞左遍歷結果。
    • 兩次遍歷綜合考慮所有相鄰關系,保證滿足所有條件且糖果數最小。

時間復雜度

  • 初始化和兩次遍歷:O(n)。
  • 求和:O(n)。
  • 總計:O(n)。

空間復雜度

  • O(n)(candies 數組)。

代碼

import java.util.*;class Solution {public int candy(int[] ratings) {// 獲取數組長度int n = ratings.length;// 初始化糖果數組,每個孩子至少 1 顆糖果int[] candies = new int[n];Arrays.fill(candies, 1);// 從左到右遍歷:處理評分遞增情況for (int i = 1; i < n; i++) {// 如果當前孩子評分高于前一個,分配更多糖果if (ratings[i] > ratings[i - 1]) {candies[i] = candies[i - 1] + 1;}}// 從右到左遍歷:處理評分遞減情況for (int i = n - 2; i >= 0; i--) {// 如果當前孩子評分高于后一個,確保糖果數大于后一個if (ratings[i] > ratings[i + 1]) {// 取當前糖果數和后一個糖果數+1的最大值,保留左遍歷結果candies[i] = Math.max(candies[i], candies[i + 1] + 1);}}// 計算總糖果數int sum = 0;for (int candy : candies) {sum += candy;}return sum;}
}

860.檸檬水找零

在檸檬水攤上,每一杯檸檬水的售價為?5?美元。顧客排隊購買你的產品,(按賬單?bills?支付的順序)一次購買一杯。

每位顧客只買一杯檸檬水,然后向你付?5?美元、10?美元或?20?美元。你必須給每個顧客正確找零,也就是說凈交易是每位顧客向你支付?5?美元。

注意,一開始你手頭沒有任何零錢。

給你一個整數數組?bills?,其中?bills[i]?是第?i?位顧客付的賬。如果你能給每位顧客正確找零,返回?true?,否則返回?false?。

示例 1:

輸入:bills = [5,5,5,10,20]
輸出:true
解釋:
前 3 位顧客那里,我們按順序收取 3 張 5 美元的鈔票。
第 4 位顧客那里,我們收取一張 10 美元的鈔票,并返還 5 美元。
第 5 位顧客那里,我們找還一張 10 美元的鈔票和一張 5 美元的鈔票。
由于所有客戶都得到了正確的找零,所以我們輸出 true。

示例 2:

輸入:bills = [5,5,10,10,20]
輸出:false
解釋:
前 2 位顧客那里,我們按順序收取 2 張 5 美元的鈔票。
對于接下來的 2 位顧客,我們收取一張 10 美元的鈔票,然后返還 5 美元。
對于最后一位顧客,我們無法退回 15 美元,因為我們現在只有兩張 10 美元的鈔票。
由于不是每位顧客都得到了正確的找零,所以答案是 false。

提示:

  • 1 <= bills.length <= 105
  • bills[i]?不是?5?就是?10?或是?20?

解題思路

問題核心

  • 每位顧客支付 5、10 或 20 美元,購買一杯 5 美元的檸檬水,需找回 bill - 5 美元。
  • 初始沒有零錢,只能用收到的鈔票找零。
  • 目標:判斷是否能為所有顧客正確找零,返回 true 或 false。

貪心策略

  1. 跟蹤零錢
    • 只需跟蹤 5 美元和 10 美元鈔票的數量(five 和 ten),因為 20 美元鈔票無法用于找零(題目中找零只涉及 5 美元和 10 美元)。
  2. 處理每種賬單
    • 5 美元:直接收下,增加 five++,無需找零。
    • 10 美元:需找回 5 美元(10 - 5),消耗 1 張 5 美元鈔票(five--),增加 1 張 10 美元鈔票(ten++)。如果 five == 0,無法找零,返回 false。
    • 20 美元:需找回 15 美元(20 - 5),有兩種找零方式:
      • 優先用 1 張 10 美元 + 1 張 5 美元(ten--, five--),以保留更多 5 美元鈔票(因為 5 美元更靈活)。
      • 如果沒有 10 美元鈔票,嘗試用 3 張 5 美元(five -= 3)。
      • 如果兩者都不可行,返回 false。
  3. 為什么貪心有效
    • 優先使用 10 美元 + 5 美元找零 20 美元,減少對 5 美元鈔票的消耗,因為 5 美元鈔票對后續找零(10 美元或 20 美元)更關鍵。
    • 每次決策局部最優(保留最多 5 美元鈔票),確保全局可行性。
    • 如果某次無法找零,說明零錢不足,返回 false;否則,遍歷完成返回 true。

時間復雜度

  • 單遍遍歷 bills 數組:O(n),其中 n 是 bills.length。
  • 總計:O(n)。

空間復雜度

  • O(1),僅使用兩個變量(five 和 ten)。

代碼?

class Solution {public boolean lemonadeChange(int[] bills) {// 初始化 5 美元和 10 美元鈔票數量int five = 0, ten = 0;// 遍歷每位顧客支付的賬單for (int bill : bills) {if (bill == 5) {// 收到 5 美元,無需找零,增加 5 美元鈔票數量five++;} else if (bill == 10) {// 收到 10 美元,需找回 5 美元if (five == 0) {// 沒有 5 美元鈔票,無法找零return false;}five--; // 消耗 1 張 5 美元鈔票ten++;  // 增加 1 張 10 美元鈔票} else { // bill == 20// 收到 20 美元,需找回 15 美元if (ten > 0 && five > 0) {// 優先用 1 張 10 美元 + 1 張 5 美元找零ten--;five--;} else if (five >= 3) {// 否則用 3 張 5 美元找零five -= 3;} else {// 無法找零return false;}}}// 所有顧客都成功找零return true;}
}

406.根據身高重建隊列

假設有打亂順序的一群人站成一個隊列,數組?people?表示隊列中一些人的屬性(不一定按順序)。每個?people[i] = [hi, ki]?表示第?i?個人的身高為?hi?,前面?正好?有?ki?個身高大于或等于?hi?的人。

請你重新構造并返回輸入數組?people?所表示的隊列。返回的隊列應該格式化為數組?queue?,其中?queue[j] = [hj, kj]?是隊列中第?j?個人的屬性(queue[0]?是排在隊列前面的人)。

    示例 1:

    輸入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
    輸出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
    解釋:
    編號為 0 的人身高為 5 ,沒有身高更高或者相同的人排在他前面。
    編號為 1 的人身高為 7 ,沒有身高更高或者相同的人排在他前面。
    編號為 2 的人身高為 5 ,有 2 個身高更高或者相同的人排在他前面,即編號為 0 和 1 的人。
    編號為 3 的人身高為 6 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。
    編號為 4 的人身高為 4 ,有 4 個身高更高或者相同的人排在他前面,即編號為 0、1、2、3 的人。
    編號為 5 的人身高為 7 ,有 1 個身高更高或者相同的人排在他前面,即編號為 1 的人。
    因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新構造后的隊列。
    

    示例 2:

    輸入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
    輸出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]
    

    提示:

    • 1 <= people.length <= 2000
    • 0 <= hi <= 106
    • 0 <= ki < people.length
    • 題目數據確保隊列可以被重建

    解題思路

    問題核心

    • 給定數組 people,people[i] = [hi, ki] 表示第 i 個人身高為 hi,前面有 ki 個身高大于或等于 hi 的人。
    • 目標是構造隊列 queue,使得 queue[j] = [hj, kj] 表示隊列第 j 位的屬性,且滿足 ki 條件。
    • 題目保證隊列可被重建,解唯一。

    貪心策略

    1. 排序
      • 按身高 hi 降序排序,若身高相同,則按 ki 升序排序。
      • 理由:身高高的人應先安排,因為他們的 ki 表示前面高或等高的人數,優先處理高個子可以簡化后續插入(矮個子的 ki 不會受高個子影響)。
      • 身高相同按 ki 升序,確保 ki 較小的人先插入(因為他們需要更靠前的位置)。
    2. 插入
      • 遍歷排序后的 people,將每個 person = [hi, ki] 插入到結果隊列的索引 ki 處。
      • 插入時,ki 表示前面應有 ki 個高或等高的人。由于已按身高降序排序,之前插入的人身高大于或等于當前 hi,插入到 ki 位置正好滿足條件。
      • 使用動態列表(ArrayList)支持按索引插入,插入后隊列自動調整。
    3. 轉換為數組
      • 將動態列表轉換為 int[][] 數組返回。
    4. 為什么貪心有效
      • 按身高降序排序確保高個子優先安排,矮個子插入時不會影響高個子的 ki(因為矮個子身高小于之前的人)。
      • 按 ki 插入保證每個人的 ki 約束(前面正好有 ki 個高或等高的人)。
      • 題目保證解存在,排序和插入策略確保唯一正確隊列。

    時間復雜度

    • 排序:O(n log n),其中 n 是 people.length。
    • 插入:ArrayList 的插入操作為 O(n),總共 n 次插入,O(n2)。
    • 總計:O(n2)(插入操作主導)。

    空間復雜度

    • O(n)(queue 列表,不計輸出數組)。

    代碼?

    import java.util.*;class Solution {public int[][] reconstructQueue(int[][] people) {// 按身高降序排序,若身高相同則按 ki 升序排序Arrays.sort(people, (a, b) -> {if (a[0] != b[0]) return b[0] - a[0]; // 身高降序(高的先處理)return a[1] - b[1]; // 身高相同,ki 升序(小的 ki 先插入)});// 使用動態列表存儲重建的隊列List<int[]> queue = new ArrayList<>();// 遍歷排序后的數組,按 ki 插入到正確位置for (int[] person : people) {queue.add(person[1], person); // 在索引 person[1](ki)處插入 person}// 將列表轉換為 int[][] 數組return queue.toArray(new int[people.length][]);}
    }

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

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

    相關文章

    Qt信號與槽機制及動態調用

    Qt信號與槽機制及動態調用一、信號與槽1、Qt信號與槽機制概述2、信號與槽的基本使用3、信號與槽的特性4、使用Lambda表達式作為槽5、信號與槽的參數傳遞6、注意事項二、動態調用機制1、基本用法2、示例代碼3、帶參數的調用4、返回值處理5、信號與槽的動態連接6、動態方法調用7、…

    K8s系列之:Kubernetes 的 OLM

    K8s系列之:Kubernetes 的 OLM 什么是 Kubernetes 的 OLM什么是Kubernetes中的OperatorOLM 的功能OLM 的核心組件OLM優勢OLM 的工作原理OLM 與 OperatorHub 的關系OLM示例場景什么是CRDoperator 和 CRD的關系為什么需要 CRD 和 OperatorCRD定義資源類型DebeziumServer如何使用d…

    前端-HTML-day2

    目錄 1、無序列表 2、有序列表 3、定義列表 4、表格-基本使用 5、表格-結構標簽 6、表格-合并單元格 7、表單-input基本使用 8、表單-input占位文本 9、表單-單選框 10、表單-上傳多個文件 11、表單-多選框 12、表單-下拉菜單 13、表單-文本域 14、表單-label標簽…

    兩種方式清除已經保存的git賬號密碼

    方式一隨便選擇一個文件夾&#xff0c;然后鼠標右鍵-》TortoiseGit ->設置選擇已保存的數據-》認證數據-》清除-》點擊確定方式二 控制面板\用戶帳戶\憑據管理器-》windows憑據普通憑據-》找到git信息-》選擇刪除

    Using Spring for Apache Pulsar:Message Production

    1. Pulsar Template在Pulsar生產者端&#xff0c;Spring Boot自動配置提供了一個用于發布記錄的PulsarTemplate。該模板實現了一個名為PulsarOperations的接口&#xff0c;并提供了通過其合約發布記錄的方法。這些send API方法有兩類&#xff1a;send和sendAsync。send方法通過…

    CSS揭秘:10.平行四邊形

    前置知識&#xff1a;基本的css變形一、平行四邊形 要實現一個平行四邊形&#xff0c;可以使用CSS的skew變形屬性來傾斜元素。 transform: skewX(-45deg);圖-1顯示容器和內容都出現了傾斜&#xff0c;該如何解決這個問題&#xff1f; 二、嵌套方案 我們通過將內容嵌套 div 并使…

    深度學習 必然用到的 線性代數知識

    把標量到張量、點積到范數全串起來&#xff0c;幫你從 0 → 1 搭建 AI 數學底座 &#x1f680; 1 標量&#xff1a;深度學習的最小單元 標量 就是一維空間里的“點”&#xff0c;只有大小沒有方向。例如溫度 52 F、學習率 0.001。 記號&#xff1a;普通小寫 x&#xff1b;域&am…

    OpenGL ES 紋理以及紋理的映射

    文章目錄開啟紋理創建紋理綁定紋理生成紋理紋理坐標圖像配置線性插值重復效果限制拉伸完整代碼在 Android OpenGL ES 中使用紋理&#xff08;Texture&#xff09;可以顯著提升圖形渲染的質量和效率。以下是使用紋理的主要好處&#xff1a; 增強視覺真實感 紋理可以將復雜的圖像…

    從金字塔到個性化路徑:AI 正在重新定義學習方式

    幾十年來&#xff0c;我們的教育系統始終遵循著一條熟悉的路線&#xff1a; 從小學、初中、高中&#xff0c;再到大學和研究生。這條標準化的路徑&#xff08;K-12 到研究所&#xff09;結構清晰&#xff0c;卻也緩慢。但在當今這個信息爆炸、知識快速更新、個性化需求高漲的時…

    產品經理崗位職責拆解

    以下是產品經理崗位職責的詳細分解表&#xff0c;涵蓋工作內容、核心動作及輸出成果&#xff1a;崗位職責具體工作內容輸出成果1. 日常版本迭代管理需求分析及PRD產出協調資源推動產品上線- 收集業務/用戶需求&#xff0c;分析可行性及優先級- 撰寫PRD文檔&#xff0c;明確功能…

    后端微服務基礎架構Spring Cloud

    版本關系 版本發布說明-阿里云Spring Cloud Alibaba官網 選擇 創建項目 創建父項目 什么都不動&#xff0c;創建即可 1) 刪掉沒用的文件 保留 2) pom中加入 打包方式 <packaging>pom</packaging> 3) 刪掉src 4) pom.xml中刪除沒用的 5)更改pom.xml中 spring…

    數據分析框架和方法

    一、核心分析框架 (The Big Picture Frameworks)??描述性分析 (What Happened?)????目的&#xff1a;?? 了解過去發生了什么&#xff0c;描述現狀&#xff0c;監控業務健康。??核心工作&#xff1a;?? 匯總、聚合、計算基礎指標 (KPI)&#xff0c;生成報表和儀表盤…

    電路研究9.3.10——合宙Air780EP中的AT開發指南:阿里云應用指南

    這個好像也用不到&#xff0c;不過可以先貼出來。簡單看了一下也沒深入分析&#xff0c;直接扒過來了&#xff0c;感覺涉及到了上位機的學習了。我這下位機的可能用不到&#xff0c;就是貼過來好了。 應用概述 使用 AT 方式連接阿里云分為一機一密和一型一密&#xff0c;其中一…

    [Backlog] 核心協調器 | 終端用戶界面(TUI)實現 | 多分支任務沖突解決 | 測試驗證體系

    第8章 核心協調器 歡迎回到Backlog.md&#xff01; 在上一章文件系統操作中&#xff0c;我們深入了解了數據物理存儲層面的讀寫機制。本章將聚焦系統的神經中樞——核心協調器。 核心協調器的本質&#xff08;中央決策引擎&#xff09; 如果將Backlog.md視為項目管理團隊&a…

    車載以太網-TC8測試-UT(Upper Tester)

    目錄 一、技術原理:指令體系與協議適配1. **指令格式與傳輸機制**2. **協議棧交互邏輯**3. **規范遵循與版本演進**二、測試應用:TC8測試場景與案例1. **TCP協議棧深度驗證**2. **ARP協議健壯性測試**3. **SOME/IP服務動態管理**三、實現挑戰與解決方案1. **實時性要求**2. *…

    扣子Coze純前端部署多Agents

    純前端網頁搭建&#xff0c;無需任何后端代碼&#xff0c;方便快捷&#xff01; 就像公司前臺的多功能控制臺&#xff0c;員工可以通過按鈕快速呼叫不同的AI助手。具備多設備適配、智能對話等基礎能力。 支持添加多個智能體 配置方式 添加智能體信息&#xff0c;data-bot為智…

    STM32中I2C協議詳解

    前言 在嵌入式系統中&#xff0c;設備間的短距離通信協議中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff0c;集成電路互連&#xff09;以其信號線少、布線簡單、支持多從機等特點&#xff0c;被廣泛應用于傳感器、EEPROM、OLED屏等中低速外設的通信場景。與SP…

    解鎖Spring Boot多項目共享Redis:優雅Key命名結構指南

    引言Redis 基礎與 Spring Boot 集成Redis 簡介Redis&#xff0c;即 Remote Dictionary Server&#xff0c;是一個開源的基于內存的數據結構存儲系統&#xff0c;可用作數據庫、緩存和消息中間件 。它具備諸多顯著特性&#xff0c;使其在現代軟件開發中占據重要地位。Redis 的讀…

    《重構項目》基于Apollo架構設計的項目重構方案(多種地圖、多階段、多任務、狀態機管理)

    1. 項目結構設計project/ ├── config/ # 配置文件&#xff08;定義 Scenario、Stage、Task 的映射&#xff09; ├── src/ │ ├── base/ # 抽象基類定義 │ │ ├── scenario_base.h/.cpp │ │ ├── stage_base.h/.cpp…

    動手學深度學習13.6. 目標檢測數據集-筆記練習(PyTorch)

    以下內容為結合李沐老師的課程和教材補充的學習筆記&#xff0c;以及對課后練習的一些思考&#xff0c;自留回顧&#xff0c;也供同學之人交流參考。 本節課程地址&#xff1a;數據集_嗶哩嗶哩_bilibili 本節教材地址&#xff1a;13.6. 目標檢測數據集 — 動手學深度學習 2.0…