2024-08-31:用go语言,给定一个数组apple,包含n个元素,每个元素表示一个包裹中的苹果数量; 另一个数组capacity包含m个元素,表示m个不同箱子的容量。 有n个包裹,每个包裹内装有

news/2024/10/4 3:31:54

2024-08-31:用go语言,给定一个数组apple,包含n个元素,每个元素表示一个包裹中的苹果数量;

另一个数组capacity包含m个元素,表示m个不同箱子的容量。

有n个包裹,每个包裹内装有指定数量的苹果,以及m个箱子,每个箱子的容量不同。

任务是将这n个包裹中的所有苹果重新分配到箱子中,最小化所需的箱子数量。

需要注意的是,可以将同一个包裹中的苹果分装到不同的箱子中。

需要计算并返回实现这一目标所需的最小箱子数量。

输入:apple = [1,3,2], capacity = [4,3,1,5,2]。

输出:2。

解释:使用容量为 4 和 5 的箱子。

总容量大于或等于苹果的总数,所以可以完成重新分装。

答案2024-08-31:

chatgpt

题目来自leetcode3074。

大体步骤如下:

1.首先,计算所有苹果的总数,用变量 s 表示。

2.将箱子的容量按照降序排列,通过调用 slices 包里的 SortFunc 函数,将 capacity 数组按照从大到小排序。

3.遍历排序后的容量数组,从大到小依次尝试将苹果放入箱子中。

4.在每个循环中,尝试将当前箱子的容量 c 与苹果总数 s 比较:

  • 如果 s 小于等于 0,表示所有苹果都已经装箱了,返回当前箱子的索引 + 1,即已经使用的箱子数目。

  • 如果 s 大于 0,继续尝试将苹果放入下一个箱子,更新 s 为剩余苹果的数量。

5.如果循环结束时仍未返回箱子数量,说明无法将所有苹果重新分装到箱子中,返回 -1。

总的时间复杂度:

  • 计算苹果总数的时间复杂度为 O(n),n 为苹果数量。

  • 对箱子容量进行排序的时间复杂度为 O(m log m),m 为箱子数量。

  • 遍历箱子容量的时间复杂度为 O(m),m 为箱子数量。

综合起来,总的时间复杂度大致在 O((n + m) log m) 的数量级。

总的额外空间复杂度:

  • 只使用了常数级别的额外空间,因此额外空间复杂度为 O(1)。

Go完整代码如下:

package mainimport ("fmt""slices"
)func minimumBoxes(apple, capacity []int) int {s := 0for _, x := range apple {s += x}slices.SortFunc(capacity, func(a, b int) int { return b - a })for i, c := range capacity {s -= cif s <= 0 { // 所有苹果都装入了箱子return i + 1 // 0 到 i 有 i+1 个箱子}}return -1
}func main() {apple := []int{1, 3, 2}capacity := []int{4, 3, 1, 5, 2}fmt.Println(minimumBoxes(apple, capacity))
}

在这里插入图片描述

Rust完整代码如下:

fn minimum_boxes(apple: Vec<i32>, mut capacity: Vec<i32>) -> i32 {let mut s: i32 = apple.iter().sum();capacity.sort_by(|a, b| b.cmp(a));for (i, &c) in capacity.iter().enumerate() {s -= c;if s <= 0 {return (i + 1) as i32;}}-1
}fn main() {let apple = vec![1, 3, 2];let capacity = vec![4, 3, 1, 5, 2];println!("{}", minimum_boxes(apple, capacity));
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/55103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

主元素问题(C语言)

主元素问题(C语言) 题目参考代码 #include <stdio.h> int main() {// 主元素问题int n, s[400002], num = 1, max = 0, maxNum = 0;scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &s[i]);for (int i = 0; i < n; i++) //…

如何在愈发激烈的2025广西南宁中考中生存下来

背景 以2024年为例 吃了择校的亏 七年级结束后,北宁市教育局突然通知北宁市的X中学和S学校转为公办。 近年来教育改革过程中,我确实没有吃到这个时代发展的红利,反观北宁市的一些高中越来越卷,逐渐衡水化。 要求 考前学科答题规范讲座(语文主讲:南宁二中申颖老师):不要…

Markdown学习20221418曾庆林

一、我掌握的内容 1.Markdown及其基本的语法(标题,有序列表,代码) 2.线下工具vscode 二、我没有掌握的内容 1.markdown详细语法(斜体,无序列表,链接,引用,分割线,表格) 2.线上工具 3.插入公式,绘图,格式转换 4. ChatGPT 等 AIGC 的提示词工程中的应用 三、实践 斜…

20221421李旻奇Markdown学习

问题1:哪些内容是你掌握的?哪些内容是你没有掌握的?使用AI推荐的工具或者你喜欢的工具实践一下没有掌握的内容 本次学习使用ChatGPT回复 我掌握的 Markdown是一种轻量级的标记语言,用于格式化文本。它的设计目标是使文本在不需要复杂工具的情况下能保持良好的可读性和可写性…

回顾一些常识————环境变量

前言 最近写一些底层一些的东西,简单回顾一下环境变量. 正文 首先我们来看下c 语言的环境变量的位置。可以看到每个进程都有自己的环境变量,操作系统会复制环境变量的副本给一个新创建的进程。 那么这个副本哪里来呢? 是操作系统自己维护一份在内存中吗?那不是,因为操作系…

win7系统更新在哪里,win7怎么关闭电脑更新呢

在Windows 7系统中,进行系统更新和关闭更新的操作主要通过“控制面板”来完成。以下是详细的步骤: 一、Win7系统更新在哪里 打开控制面板: 点击屏幕左下角的“开始”菜单,选择“控制面板”。 进入Windows Update: 在控制面板中,找到并点击“系统和安全”类别。 在“系统和…