2026-06-30:容量最小的箱子。用go语言,给定一个整数数组 capacity 和一个整数 item)Size:

  • capacity[i] 表示第 i 个箱子的容量。

  • • 若某个箱子的容量满足 capacity[i] >= itemSize,则说明该箱子可以放下这个物品。
    任务是:

找出所有能放下该物品的箱子中,容量最小的那个箱子对应的下标并返回。

补充规则:

  • • 如果存在多个箱子的容量都满足“最小容量”这一条件,则返回其中下标最小的那个。

  • • 如果所有箱子都无法放下该物品,则返回 -1。

1 <= capacity.length <= 100。

1 <= capacity[i] <= 100。

1 <= itemSize <= 100。

输入: capacity = [1,5,3,7], itemSize = 3。

输出: 2。

解释:

下标为 2 的箱子容量为 3,是可以存放该物品的容量最小的箱子,因此答案是 2。

题目来自力扣3861。

一、函数执行分步详细过程 步骤1:初始化两个标记变量

  1. 1. 变量minC:用来记录符合条件箱子的最小容量,初始赋值为系统最大整数math.MaxInt,保证后续任意合法箱子容量都会比它小,能完成首次替换。

  2. 2. 变量ans:用来记录最终要返回的箱子下标,初始赋值-1,对应题目“无可用箱子返回-1”的默认结果。

步骤2:从头遍历整个容量数组,逐个校验每个箱子

遍历规则:按数组下标从小到大依次读取每一个箱子的下标i和对应容量c,保证出现多个相同最小容量时,只会保留最先遇到(下标更小)的下标,满足题目补充规则。
数组元素依次遍历流程:

第1轮循环:i=0,c=1

判断条件:c >= itemSize1 >= 3,结果不成立。
不进入内部逻辑,直接跳过,minCans保持原值不变。

第2轮循环:i=1,c=5

判断条件:5 >= 3,条件成立;继续判断c < minC5 < 最大整数,条件成立。

  1. 1. 更新最小容量:minC = 5

  2. 2. 更新结果下标:ans = 1
    当前记录:可用最小容量5,对应下标1。

第3轮循环:i=2,c=3

判断条件:3 >= 3,条件成立;继续判断c < minC3 < 5,条件成立。

  1. 1. 更新最小容量:minC = 3

  2. 2. 更新结果下标:ans = 2
    当前记录:可用最小容量3,对应下标2。

第4轮循环:i=3,c=7

判断条件:7 >= 3,条件成立;继续判断c < minC7 < 3,条件不成立。
不更新任何变量,minC仍为3、ans仍为2。

步骤3:遍历结束,返回结果变量

全部箱子遍历完毕,ans存储的值为2,将2作为函数返回值输出。

补充边界场景逻辑说明

  1. 1. 多个箱子拥有相同最小可用容量:
    因为遍历严格按下标从小到大执行,只有当当前箱子容量严格小于已记录最小容量时,才会更新下标;容量相等时不会触发更新,会保留更早、下标更小的下标,符合题目要求。
    例:capacity=[4,3,3],itemSize=3,遍历到i=1时ans=1,i=2容量同为3不更新,最终返回1。

  2. 2. 无箱子能放下物品:
    全程没有任何一次进入条件内部,ans始终是初始值-1,最终返回-1。

二、复杂度分析 1. 时间复杂度

数组长度记为 n(capacity.length)。
算法会完整遍历数组中每一个元素,循环执行 n 次,每次循环内仅做两次数值比较、少量赋值操作,都是常数级 O(1) 运算,无嵌套循环。
总时间复杂度:O(n)

2. 额外空间复杂度

算法仅创建了两个独立整型变量minCans,开辟的存储空间数量和输入数组长度 n 无关,是固定常数空间,没有新建数组、切片、哈希表等随输入规模变化的容器。
总额外空间复杂度:O(1)

Go完整代码如下:

package main

import (
"fmt"
"math"
)

func minimumIndex(capacity []int, itemSize int)int {
minC := math.MaxInt
ans := -1
for i, c := range capacity {
if c >= itemSize && c < minC {
minC = c
ans = i
}
}
return ans
}

func main() {
capacity := []int{1, 5, 3, 7}
itemSize := 3
result := minimumIndex(capacity, itemSize)
fmt.Println(result)
}
打开网易新闻 查看精彩图片

Python完整代码如下:

# -*-coding:utf-8-*-

import math

def minimum_index(capacity: list[int], item_size: int) -> int:
min_c = math.inf
ans = -1
for i, c in enumerate(capacity):
if c >= item_size and c < min_c:
min_c = c
ans = i
return ans

def main() -> None:
capacity = [1, 5, 3, 7]
item_size = 3
result = minimum_index(capacity, item_size)
print(result)

if __name__ == "__main__":
main()
打开网易新闻 查看精彩图片

C++完整代码如下:

  


// 提供 INT_MAX

int minimumIndex(const std::vector& capacity, int itemSize) {
int minC = INT_MAX;
int ans = -1;
for (int i = 0; i < capacity.size(); ++i) {
int c = capacity[i];
if (c >= itemSize && c < minC) {
minC = c;
ans = i;
}
}
return ans;
}

int main() {
std::vector capacity = {1, 5, 3, 7};
int itemSize = 3;
int result = minimumIndex(capacity, itemSize);
std::cout << result << std::endl;
return0;
}
打开网易新闻 查看精彩图片

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。