Leetcode 881 - Boats to Save People

題目

Problem#

題目給你一個整數陣列 people[i] 是每個人的重量,今天要搭船過河,每條船最多載重 limit,一艘船最多載兩個人,問你最少需要幾條船。

  • 1 <= people.length <= 5 * 10^4
  • 1 <= people[i] <= limit <= 3 * 10^4

想法#

直覺想法是 sort 之後從小的開始挑,盡量挑滿,但這樣不是最佳解,因為小配小不一定是最佳,因為它可能可以跟大配且重量 <= limit
所以解法是: 從大的開始搭船,假如大 + 小 <= limit 那就一起搭船

  • 時間複雜度: $\mathcal{O}(n\log{n})$ (sort)
  • 空間複雜度: $\mathcal{O}(n)$

AC Code#