📘 題目敘述
你會拿到一個整數陣列 capacity,其中
capacity[i] 代表第
i 個箱子的容量,以及一個整數
itemSize 代表物品的大小。
如果 capacity[i] >= itemSize,則第
i 個箱子可以裝下該物品。
請回傳能裝下物品的箱子中,容量最小的那個箱子索引。如果有多個箱子容量同樣最小,回傳索引最小的那個。如果沒有任何箱子能裝下物品,回傳
-1。
條件限制
1 <= capacity.length <= 1001 <= capacity[i] <= 1001 <= itemSize <= 100
🧠 解題思路
直接線性掃描一遍
capacity,維護目前最小可用容量與對應索引。若遇到
capacity[i] == itemSize,可立刻回傳,因為這已是可行最小值。
所有變數
-
pos:目前找到最小可用容量的索引,初始-1 -
cap:目前最小可用容量,初始INT_MAX
🪜 主要流程步驟
1. 初始化
pos = -1、cap = INT_MAX。
2. 掃描每個箱子
-
capacity[i] == itemSize:直接回傳i -
capacity[i] > itemSize:若更小則更新cap與pos
3. 回傳答案
掃描後回傳 pos。
⏱️ 複雜度
- 時間複雜度:
O(n) - 空間複雜度:
O(1)
💻 程式碼實作
class Solution {
public:
int minimumIndex(vector<int>& capacity, int itemSize) {
int pos = -1;
int cap = INT_MAX;
for (int i = 0; i < capacity.size(); i++) {
if (capacity[i] > itemSize && cap > capacity[i]) {
cap = capacity[i];
pos = i;
} else if (capacity[i] == itemSize) {
return i;
}
}
return pos;
}
};
🔗 題目連結
https://leetcode.com/contest/weekly-contest-492/problems/minimum-capacity-box/