前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2024-08-31:用go语言,给定一个数组apple,包含n个元素,每个元素表示一个包裹中的苹果数量; 另一个数组capac

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

作者头像
福大大架构师每日一题
发布2024-09-06 14:12:52
940
发布2024-09-06 14:12:52
举报
文章被收录于专栏:福大大架构师每日一题

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完整代码如下:

代码语言:javascript
复制
package main

import(
"fmt"
"slices"
)

func minimumBoxes(apple, capacity []int)int{
    s :=0
for _, x :=range apple {
        s += x
}
    slices.SortFunc(capacity,func(a, b int)int{return b - a })
for i, c :=range capacity {
        s -= c
if 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完整代码如下:

代码语言:javascript
复制
fn minimum_boxes(apple:Vec<i32>,mut capacity:Vec<i32>)->i32{
letmut 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)asi32;
}
}
-1
}

fnmain(){
letapple=vec![1,3,2];
letcapacity=vec![4,3,1,5,2];
println!("{}",minimum_boxes(apple, capacity));
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大体步骤如下:
  • Go完整代码如下:
  • Rust完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档