2024-02-03:用go语言,你有 k 个背包。给你一个下标从 0 开始的整数数组 weights,

其中 weights[i] 是第 i 个珠子的重量。同时给你整数 k,

请你按照如下规则将所有的珠子放进 k 个背包。

没有背包是空的。

如果第 i 个珠子和第 j 个珠子在同一个背包里,

那么下标在 i 到 j 之间的所有珠子都必须在这同一个背包中,

如果一个背包有下标从 i 到 j 的所有珠子,那么这个背包的价格是 weights[i] + weights[j] 。

一个珠子分配方案的 分数 是所有 k 个背包的价格之和。

请你返回所有分配方案中,最大分数 与 最小分数 的 差值 为多少。

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

输出:4。

答案2024-02-03:

来自左程云

灵捷3.5

大体步骤如下:

1.初始化变量:

  • 将权重数组 weights 的长度保存在变量 n 中。

  • 创建一个长度为 n-1 的整数数组 sums

2.计算相邻珠子重量之和:

  • 遍历 weights 数组中的元素,对于每个元素 weights[i],计算 weights[i] 和 weights[i+1] 的和,并将结果保存在 sums[i] 中。

3.对 sums 数组进行排序:

  • 使用排序函数对 sums 数组进行升序排序。

4.循环分配珠子到背包:

4.1.初始化变量 ans 为 0,用于保存最终的结果。

4.2.使用循环,从 i=0, j=n-2, p=1 开始循环,其中 p 表示已经形成背包的数量。

4.3.当 p 小于 k 时,执行以下操作:

4.3.1.计算 sums[j] - sums[i] 的差值,并将其累加到 ans 中。

4.3.2.分别将 ij 的值增加和减少 1,将 p 增加 1。

5.返回结果 ans,即最大分数与最小分数之差。

总的时间复杂度:排序操作的时间复杂度为 O(n log n),其中 n 是珠子的数量。其他步骤的时间复杂度都是 O(n)。因此,总的时间复杂度为 O(n log n)。

总的额外空间复杂度:除了输入的权重数组 weights 外,在算法执行过程中需要额外使用的空间为 sums 数组,其长度为 n-1,因此额外空间复杂度为 O(n)。

go完整代码如下:

package main

import (
"fmt"
"sort"
) func putMarbles(weights []int, k int) int64 {
n := len(weights)
sums := make([]int64, n-1)
for i := 1; i < n; i++ {
sums[i-1] = int64(weights[i-1] + weights[i])
}
sort.Slice(sums, func(i, j int) bool {
return sums[i] < sums[j]
})
var ans int64
for i, j, p := 0, n-2, 1; p < k; i, j, p = i+1, j-1, p+1 {
ans += sums[j] - sums[i]
}
return ans
} func main() {
weights := []int{1, 3, 5, 1}
k := 2
result := putMarbles(weights, k)
fmt.Println(result)
}

python完整代码如下:

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

def putMarbles(weights, k):
n = len(weights)
sums = [weights[i-1] + weights[i] for i in range(1, n)]
sums.sort()
ans = 0
for i, j, p in zip(range(n-1), range(n-2, -1, -1), range(1, k)):
ans += sums[j] - sums[i]
return ans weights = [1, 3, 5, 1]
k = 2
result = putMarbles(weights, k)
print(result)

2024-02-03:用go语言,你有 k 个背包。给你一个下标从 0 开始的整数数组 weights, 其中 weights[i] 是第 i 个珠子的重量。同时给你整数 k, 请你按照如下规则将所有的更多相关文章

  1. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  2. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

  3. 谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?

    谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做? 分析: "假设两个整数数组为A和B,各有N个元素,任意两个数的和组成的数组C有N^2个元素. ...

  4. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  5. 02.02.03第3章 餐饮项目案例(Power BI商业智能分析)

    02.02.03第3章 餐饮项目案例 02.02.03.01餐饮数据理解与读入 00:06:12 02.02.03.02餐饮数据处理 00:29:57 处理生成的表为: 02.02.03.03餐饮数据 ...

  6. LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...

  7. 编写函数求整形数组a中存储的m个不重复的整数的第k大的整数(其中m>=1,1<=k<=m)很简单的一个思路是酱紫的:管他辣么多干啥,上来一把排序然后直接得答案

    /** * @author:(LiberHome) * @date:Created in 2019/2/28 20:38 * @description: * @version:$ *//*编写函数求整 ...

  8. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  9. 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

    /** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...

  10. 在行列都排好序的矩阵中找数 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一 列都是排好序的。实现一个函数,判断K 是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返 回false。 【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。

    从对角考虑 package my_basic.class_3; /** * 从对角开始 */ public class Code_09_FindNumInSortedMatrix { public s ...

随机推荐

  1. es报错记录

    ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsear ...

  2. java对excle操作:下载、上传以及上传中错误数据动态生成excle给用户下载

    工作中经常遇到excle文件的上传下载,这里就总结一下相关的操作,尤其是最后一个方法"上传excle文件校验数据格式,挑出格式错误的数据"网上没有找到相关的例子,自己组合改写了一下 ...

  3. el-menu菜单过长,显示不全问题

  4. json 解析:marshal 和 unmarshal

    Go 使用 encoding/json 包的 marshal 和 unmarshal 实现 json 数据的编解码.分别记录如下: 1. marshal 定义结构体: type OCP struct ...

  5. Jupyter Notebook报错'500 : Internal Server Error'的解决方法

    问题根因 Jupyter相关的软件包版本匹配存在问题,或者历史上安装过Jupyter相关的配套软件但是有残留.大部分网上的博客都是推荐用pip重装jupyter或者nbconvert,亲测无法解决该问 ...

  6. HanLP — 感知机(Perceptron)

    感知机(Perceptron)是一个二类分类的线性分类模型,属于监督式学习算法.最终目的: 将不同的样本分本 感知机饮食了多个权重参数,输入的特征向量先是和对应的权重相乘,再加得到的积相加,然后将加权 ...

  7. java - 冒泡排序求最值

    public class Bubble3 { public static void main(String[] args) { int[] arr; arr = new int[]{2,3,6,1}; ...

  8. [转帖]Tiup 常用运维操作命令干货

    https://zhuanlan.zhihu.com/p/356031031 **导读**> 作者:杨漆> 16年关系型数据库管理,从oracle 9i .10g.11g.12c到Mysq ...

  9. [转帖]elasticsearch-create-enrollment-tokenedit

    https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html The ela ...

  10. [转帖]调试springboot数据库系统应用时常用debug日志配置, 解决问题缩小范围时常用

    https://www.yihaomen.com/article/1853.html 摘要: 用 spring boot 开发应用时,在遇到麻烦问题时,经常会打开debug日志,下面记录一个通用的思路 ...