国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2023-07-07 LeetCode每日一題(過橋的時間)

這篇具有很好參考價值的文章主要介紹了2023-07-07 LeetCode每日一題(過橋的時間)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2023-07-07每日一題

一、題目編號

2532. 過橋的時間

二、題目鏈接

點擊跳轉(zhuǎn)到題目位置

三、題目描述

共有 k 位工人計劃將 n 個箱子從舊倉庫移動到新倉庫。給你兩個整數(shù) n 和 k,以及一個二維整數(shù)數(shù)組 time ,數(shù)組的大小為 k x 4 ,其中 time[i] = [leftToRighti, pickOldi, rightToLefti, putNewi] 。

一條河將兩座倉庫分隔,只能通過一座橋通行。舊倉庫位于河的右岸,新倉庫在河的左岸。開始時,所有 k 位工人都在橋的左側(cè)等待。為了移動這些箱子,第 i 位工人(下標(biāo)從 0 開始)可以:

  • 從左岸(新倉庫)跨過橋到右岸(舊倉庫),用時 leftToRighti 分鐘。
  • 從舊倉庫選擇一個箱子,并返回到橋邊,用時 pickOldi 分鐘。不同工人可以同時搬起所選的箱子。
  • 從右岸(舊倉庫)跨過橋到左岸(新倉庫),用時 rightToLefti 分鐘。
  • 將箱子放入新倉庫,并返回到橋邊,用時 putNewi 分鐘。不同工人可以同時放下所選的箱子。

如果滿足下面任一條件,則認(rèn)為工人 i 的 效率低于 工人 j :

  • leftToRighti + rightToLefti > leftToRightj + rightToLeftj
  • leftToRighti + rightToLefti == leftToRightj + rightToLeftj 且 i > j

工人通過橋時需要遵循以下規(guī)則:

  • 如果工人 x 到達(dá)橋邊時,工人 y 正在過橋,那么工人 x 需要在橋邊等待。
  • 如果沒有正在過橋的工人,那么在橋右邊等待的工人可以先過橋。如果同時有多個工人在右邊等待,那么 效率最低 的工人會先過橋。
  • 如果沒有正在過橋的工人,且橋右邊也沒有在等待的工人,同時舊倉庫還剩下至少一個箱子需要搬運,此時在橋左邊的工人可以過橋。如果同時有多個工人在左邊等待,那么 效率最低 的工人會先過橋。

所有 n 個盒子都需要放入新倉庫,請你返回最后一個搬運箱子的工人 到達(dá)河左岸 的時間。

提示:

  • 1 <= n, k <= 104
  • time.length == k
  • time[i].length == 4
  • 1 <= leftToRighti, pickOldi, rightToLefti, putNewi <= 1000

四、解題代碼

/*
    time[i][0] : leftToRight
    time[i][1] : pickOld
    time[i][2] : rightToLeft
    time[i][3] : putNew
*/

class Solution {
public:
    using p = pair<int, int>;
    int findCrossingTime(int n, int k, vector<vector<int>>& time) {
        auto wait_priority_cmp = [&](int x, int y) {
            int time_x = time[x][0] + time[x][2];
            int time_y = time[y][0] + time[y][2];
            return time_x != time_y ? time_x < time_y : x < y;
        };
        /*
        優(yōu)先隊列1 左右等待
        */
        priority_queue<int, vector<int>, decltype(wait_priority_cmp)> wait_left(wait_priority_cmp),
    wait_right(wait_priority_cmp);
        /*
        優(yōu)先隊列2 左右工作
        */

        priority_queue<p, vector<p>, greater<p>> work_left, work_right;

        int remain_box = n, cur_time = 0;
        for(int i = 0; i < k; ++i){
            wait_left.push(i);
        }
        while(remain_box > 0 || !work_right.empty() || !wait_right.empty()){
            while (!work_left.empty() && work_left.top().first <= cur_time) {
                wait_left.push(work_left.top().second);
                work_left.pop();
            }
            
            while (!work_right.empty() && work_right.top().first <= cur_time) {
                wait_right.push(work_right.top().second);
                work_right.pop();
            }

            if (!wait_right.empty()) {
                // 2. 若右側(cè)有工人在等待,則取出優(yōu)先級最低的工人并過橋
                int id = wait_right.top();
                wait_right.pop();
                cur_time += time[id][2];
                work_left.push({cur_time + time[id][3], id});
            } else if (remain_box > 0 && !wait_left.empty()) {
                // 3. 若右側(cè)還有箱子,并且左側(cè)有工人在等待,則取出優(yōu)先級最低的工人并過橋
                int id = wait_left.top();
                wait_left.pop();
                cur_time += time[id][0];
                work_right.push({cur_time + time[id][1], id});
                remain_box--;
            } else {
                // 4. 否則,沒有人需要過橋,時間過渡到 work_left 和 work_right 中的最早完成時間
                int next_time = INT_MAX;
                if (!work_left.empty()) {
                    next_time = min(next_time, work_left.top().first);
                }
                if (!work_right.empty()) {
                    next_time = min(next_time, work_right.top().first);
                }
                if (next_time != INT_MAX) {
                    cur_time = max(next_time, cur_time);
                }
            }
        }
        return cur_time;
    }
};

五、解題思路

(1) 采用優(yōu)先隊列進(jìn)行模擬。文章來源地址http://www.zghlxwxcb.cn/news/detail-555870.html

到了這里,關(guān)于2023-07-07 LeetCode每日一題(過橋的時間)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【LeetCode - 每日一題】2594. 修車的最少時間(23.09.07)

    【LeetCode - 每日一題】2594. 修車的最少時間(23.09.07)

    給定每個師傅修車的時間和需要修的車輛總數(shù),計算修理所有汽車需要的最少時間。 師傅可以同時修車。 看到題目沒有任何頭緒,直接查看題解。 至于為什么用二分做呢,討論區(qū)有個友友這么說到: 對于修理時間 t t t 來說: 若 t t t 時間內(nèi)可以修理完所有車,則大于等于

    2024年02月09日
    瀏覽(19)
  • 2023-07-28 LeetCode每日一題(并行課程 III)

    2023-07-28 LeetCode每日一題(并行課程 III)

    點擊跳轉(zhuǎn)到題目位置 給你一個整數(shù) n ,表示有 n 節(jié)課,課程編號從 1 到 n 。同時給你一個二維整數(shù)數(shù)組 relations ,其中 relations[j] = [prevCourse j , nextCourse j ] ,表示課程 prevCoursej 必須在課程 nextCourse j 之前 完成(先修課的關(guān)系)。同時給你一個下標(biāo)從 0 開始的整數(shù)數(shù)組 time ,其

    2024年02月15日
    瀏覽(22)
  • 2023-07-13 LeetCode每日一題(下降路徑最小和)

    點擊跳轉(zhuǎn)到題目位置 給你一個 n x n 的 方形 整數(shù)數(shù)組 matrix ,請你找出并返回通過 matrix 的 下降路徑 的 最小和 。 下降路徑 可以從第一行中的任何元素開始,并從每一行中選擇一個元素。在下一行選擇的元素和當(dāng)前行所選元素最多相隔一列(即位于正下方或者沿對角線向左

    2024年02月15日
    瀏覽(24)
  • 2023-07-30 LeetCode每日一題(環(huán)形鏈表 II)

    2023-07-30 LeetCode每日一題(環(huán)形鏈表 II)

    點擊跳轉(zhuǎn)到題目位置 給定一個鏈表的頭節(jié)點 head ,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈

    2024年02月15日
    瀏覽(19)
  • 2023/07/02_leetcode每日一題_2.兩數(shù)相加

    給你兩個 非空 的鏈表,表示兩個非負(fù)的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲的,并且每個節(jié)點只能存儲 一位 數(shù)字。 請你將兩個數(shù)相加,并以相同形式返回一個表示和的鏈表。 你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。 示例: 輸入:l1 = [9,9,9,9,9,9

    2024年02月11日
    瀏覽(21)
  • 2023/07/01_leetcode每日一題_1. 兩數(shù)之和

    給定一個整數(shù)數(shù)組 nums 和一個整數(shù)目標(biāo)值 target,請你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個 整數(shù),并返回它們的數(shù)組下標(biāo)。 你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,數(shù)組中同一個元素在答案里不能重復(fù)出現(xiàn)。 你可以按任意順序返回答案。 一開始審錯題了,還以

    2024年02月12日
    瀏覽(25)
  • 2023/07/11_leetcode每日一題_16. 最接近的三數(shù)之和

    給你一個長度為 n 的整數(shù)數(shù)組 nums 和 一個目標(biāo)值 target。請你從 nums 中選出三個整數(shù),使它們的和與 target 最接近。 返回這三個數(shù)的和。 假定每組輸入只存在恰好一個解。 和三數(shù)之和那道題一樣,排序加雙指針

    2024年02月15日
    瀏覽(24)
  • 2023-09-08 LeetCode每日一題(計算列車到站時間)

    2023-09-08 LeetCode每日一題(計算列車到站時間)

    點擊跳轉(zhuǎn)到題目位置 給你一個正整數(shù) arrivalTime 表示列車正點到站的時間(單位:小時),另給你一個正整數(shù) delayedTime 表示列車延誤的小時數(shù)。 返回列車實際到站的時間。 注意,該問題中的時間采用 24 小時制。 示例 1: 示例 2: 提示: 1 = arrivaltime 24 1 = delayedTime = 24 (1) 運用

    2024年02月09日
    瀏覽(20)
  • LeetCode每日一題:2594. 修車的最少時間(2023.9.7 C++)

    目錄 2594. 修車的最少時間 題目描述: 實現(xiàn)代碼與解析: 二分 原理思路: ????????給你一個整數(shù)數(shù)組? ranks ?,表示一些機(jī)械工的? 能力值 ?。 ranksi ?是第? i ?位機(jī)械工的能力值。能力值為? r ?的機(jī)械工可以在? r * n2 ?分鐘內(nèi)修好? n ?輛車。 同時給你一個整數(shù)? cars

    2024年02月09日
    瀏覽(30)
  • LeetCode 每日一題 2023/7/24-2023/7/30

    記錄了初步解題思路 以及本地實現(xiàn)代碼;并不一定為最優(yōu) 也希望大家能一起探討 一起進(jìn)步 7/24 771. 寶石與石頭 將寶石類型放入set中 一次判斷石頭中寶石個數(shù) 7/25 2208. 將數(shù)組和減半的最少操作次數(shù) 大頂堆記錄當(dāng)前最大值 每次取最大值減半 7/26 2569. 更新數(shù)組后處理求和查詢

    2024年02月15日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包