2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从

举报
福大大架构师每日一题 发表于 2024/09/04 16:01:37 2024/09/04
【摘要】 2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少 1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。我们的目标是尽可能使选中的k个孩子的幸福值之和最大化。输入:happiness = [1,2,3], k...

2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。

在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少 1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。

我们的目标是尽可能使选中的k个孩子的幸福值之和最大化。

输入:happiness = [1,2,3], k = 2。

输出:4。

解释:按以下方式选择 2 个孩子:

1.选择幸福值为 3 的孩子。剩余孩子的幸福值变为 [0,1] 。

2.选择幸福值为 1 的孩子。剩余孩子的幸福值变为 [0] 。注意幸福值不能小于 0 。

所选孩子的幸福值之和为 3 + 1 = 4 。

答案2024-09-04:

chatgpt

题目来自leetcode3075。

大体步骤如下:

1.对孩子的幸福值数组 happiness 进行降序排序。

2.从排序后的数组中选择前 k 个幸福值最高的孩子。这些孩子的幸福值之和即为所求。

3.在选出的 k 个孩子中,逐个孩子判断幸福值是否大于等于当前所在位置的索引值,如果是,将幸福值与当前索引值相减,并累加到最终的结果中,表示该孩子的贡献幸福值。

4.最终返回累加的结果作为最大化幸福值之和的输出。

时间复杂度分析:

  • 排序的时间复杂度为 O(n*log(n)),n 为孩子的数量。

  • 选 k 个孩子时,需要遍历最多 k 个元素,时间复杂度为 O(k)。

  • 因此,总的时间复杂度为 O(n*log(n) + k)。

空间复杂度分析:

  • 需要常量级别的额外空间来进行计算,因此总的额外空间复杂度可以看作是 O(1)。

Go完整代码如下:

package main

import (
	"fmt"
	"slices"
)

func maximumHappinessSum(happiness []int, k int) (ans int64) {
	slices.SortFunc(happiness, func(a, b int) int { return b - a })
	for i, x := range happiness[:k] {
		if x <= i {
			break
		}
		ans += int64(x - i)
	}
	return
}

func main() {
	happiness := []int{1, 2, 3}
	k := 2
	fmt.Println(maximumHappinessSum(happiness, k))

}

在这里插入图片描述

Rust完整代码如下:

fn maximum_happiness_sum(happiness: &mut Vec<i32>, k: usize) -> i64 {
    happiness.sort_by(|a, b| b.cmp(a));
    let mut ans: i64 = 0;

    for (i, &x) in happiness.iter().take(k).enumerate() {
        if x <= i as i32 {
            break;
        }
        ans += x as i64 - i as i64;
    }

    ans
}

fn main() {
    let mut happiness = vec![1, 2, 3];
    let k = 2;
    println!("{}", maximum_happiness_sum(&mut happiness, k));
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。