
2025-09-07:水果成篮Ⅱ。用go语言,给定两个长度为 n 的整型数组 fruits 和 baskets,前者 fruits[i] 表示第 i 类水果的数量,后者 baskets[j] 表示第 j 个篮子的容量上限。
按以下步骤将水果依序放入篮子:
最终返回完成上述过程后,仍未被放入任何篮子的水果种类数量。
n == fruits.length == baskets.length。
1 <= n <= 100。
1 <= fruits[i], baskets[i] <= 1000。
输入: fruits = [4,2,5], baskets = [3,5,4]。
输出: 1。
解释:
fruits[0] = 4 放入 baskets[1] = 5。
fruits[1] = 2 放入 baskets[0] = 3。
fruits[2] = 5 无法放入 baskets[2] = 4。
由于有一种水果未放置,我们返回 1。
题目来自力扣3477。
fruits,其中每个元素 fruits[i] 表示第 i 类水果的数量。baskets,其中每个元素 baskets[j] 表示第 j 个篮子的容量上限。fruits[0] 到 fruits[n-1])逐一处理每一类水果。fruit(即 fruits[i]),我们需要找到一个篮子来放置它。baskets[0] 到 baskets[n-1])扫描篮子数组,寻找第一个尚未被占用(即篮子容量值未被置零)且容量至少等于当前水果数量(即 baskets[j] >= fruit)的篮子。unset 为0),并继续处理下一个水果。count 增加1(因为 unset 保持为1)。count,即未被放入任何篮子的水果种类数量。count、unset和循环变量),没有使用与输入规模相关的额外数据结构。因此,总的额外空间复杂度为 O(1)。注意:虽然我们修改了原始的baskets数组(原地标记占用),但题目允许修改(根据代码逻辑),且这并不算额外空间(因为输入数组本身可被修改)。所以额外空间复杂度是常数。
.
package main
import (
"fmt"
)
func numOfUnplacedFruits(fruits []int, baskets []int)int {
count := 0
n := len(baskets)
for _, fruit := range fruits {
unset := 1
for i := 0; i < n; i++ {
if fruit <= baskets[i] {
baskets[i] = 0
unset = 0
break
}
}
count += unset
}
return count
}
func main() {
fruits := []int{4, 2, 5}
baskets := []int{3, 5, 4}
result := numOfUnplacedFruits(fruits, baskets)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
def num_of_unplaced_fruits(fruits, baskets):
count = 0
n = len(baskets)
for fruit in fruits:
unset = 1
for i in range(n):
if fruit <= baskets[i]:
baskets[i] = 0
unset = 0
break
count += unset
return count
if __name__ == "__main__":
fruits = [4, 2, 5]
baskets = [3, 5, 4]
result = num_of_unplaced_fruits(fruits, baskets)
print(result)
我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展