iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
自我挑戰組

用 C/C++ 或 Rust 刷 Leetcode系列 第 23

「Greedy」: 881. Boats to Save People

  • 分享至 

  • xImage
  •  

今天寫 Greedy的題目 ,雖說是 medium 但蠻簡單的。

881. Boats to Save People (medium)
題目說明:

給你一個陣列 people,其中 people[i] 是第 i 個人的重量,以及無限數量的船,其中每艘船可以承載的最大重量為 limit。每艘船最多同時載運兩人,前提是這些人的重量總和不得超過限制。返回載完所有人的最少船隻數量。

想法:
每次儘量用一艘船載兩個人,並選擇剩餘中最重與最輕的人搭配,確保每次都將最重的人儘快送走,如果無法匹配到最兩個人,那就代表重的人太重,要再挑次重的人做匹配,而那位重的人,自己坐一艘船。

class Solution {
public:
    int numRescueBoats(vector<int>& people, int limit) {
        int ctrBoats = 0;
        int l = 0, r = people.size()-1; 

        sort(people.begin(), people.end());
        while (l <= r) {
            if (people[l] + people[r] <= limit) {
                l++;
            } 
            r--;
            ctrBoats += 1;
        }

        return  ctrBoats;
    }
};

時間複雜度: O(NLogN)


上一篇
「鍊節串列裡的 pointer to pointer」 : 82. Remove Duplicates from Sorted List II
下一篇
「單調堆疊」: 496. Next Greater Element I
系列文
用 C/C++ 或 Rust 刷 Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言