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

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

时间:2024-02-03 09:22:23浏览次数:24  
标签:02 背包 sums 整数 珠子 weights 数组 ans

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)

在这里插入图片描述

标签:02,背包,sums,整数,珠子,weights,数组,ans
From: https://www.cnblogs.com/moonfdd/p/18004347

相关文章

  • noip2023游记
    CSP复赛游记CSP初赛游记宣传一下day-7洛谷%你赛挂了T1写了个65pts暴力T2连无序二元组都不知道是什么,特殊性质A跑路了仅仅70pts正解想都没想过luogunoip模拟赛赛时代码day-4&day-3期中考试跟坨屎一样年级rk127day0好像没有这一天欸day1f**kccf中午考到13:0......
  • noip2023总结
    三年OI一场空,不开LL见祖宗我开LL了这仅仅是个总结noip2023游记难度:CSP-J<CSP-S<NOIp本人所获分数:CSP-J<CSP-S<NOIp看着好像没什么问题是吧,你细看,你再看可能基础还是不够扎实,就连教练都说我不是正常的人了平时对一些知识点掌握不够扎实,只会一点皮毛我还有一个问......
  • 2024七上期末考游记
    省流:炸了Day1:语文感觉炸了。。。没有选择题,大题全炸了,书写也难看的跟一坨一样作文写的是题目二,写的变身白云的一天。预估70-80地理考完彻底炸了,侯爷爷上课强调过的印度北部是白种人忘了。。。好像当时正和后桌聊天呢预估85-95中午忘了吃了啥,反正RP--英语考出来原题......
  • csp2023(不知道该不该退役)游记
    本来是想一结了之的,但还是觉得心有余而力不足,我相信自己有那个实力,可惜了,正赛完全没有发挥好,我相信我的实力是在SX新初一前十的,但发挥太差了,为SX丢了个大脸。其实不该退役的,毕竟我才初一,这次是机房里面唯一一个第一次考的人,我身上背负了很多人的期待,但这不足以成为一个理由。实际......
  • csp2023 初赛退役(you)记
    9.16csp2023初赛AFO记早上我可睡了个大懒觉,早上8点30才起,起来刷了刷水题,就出门了。J组还没进去,就看到了lzh小佬,然后进去就看到[代词使用它的]rty大佬了呵呵呵,没想到跟wzy和xzx大佬一个考场,虽然他们奇菜无比我似乎把手环带进去了。。。前15道选择:我脑瘫忘了哈夫曼,直到晚......
  • 24/02/02 按钮
    题目描述有一排按钮,编号为\(0\simn-1\)。现在有两种操作:\(p\)\(l\)\(r\):表示把编号在\([l,r]\)范围内的按钮都按下去。\(r\)\(l\)\(r\):表示把编号在\([l,r]\)范围内的按钮都提一格。保证这个操作与之前某个按下操作的区间一样,且一次按下只会释放一次。如下......
  • AT_past202107_l 题解
    Solution题目来源:AT_past202107_l(inAtCoder|inluogu)用线段树维护区间最小值。单点修改很好写,我们看怎么区间寻找最小值位置。对于每次询问,我们先求出所查询区间\([x_i,y_i]\)的最小值\(p\),然后写一个寻找函数。对于当前区间\([l,r]\),分以下情况来看:如果当前区间长......
  • 在 Windows 10 上使用 Visual Studio 2022 C++ 桌面开发
    工具下载链接:https://pan.quark.cn/s/c70b23901ccb环境介绍在今天的快速发展的软件开发行业中,选择合适的开发环境是非常关键的一步。对于C++开发人员来说,VisualStudio2022(VS2022)是一个强大的集成开发环境(IDE),特别是在Windows10操作系统中。安装VisualStudio2022本文将引导您......
  • noip2023 游记
    Day0看暑假的题解和笔记,写了两道小题,并用1h码了P1505[国家集训队]旅游,但是240行...下午帮hyl干活,想起来没写过树套树,于是写了一会,没写完@262620zzj用归并排序处理n=8的“机密文件”,难评开家长会,没被que,好事应该没人发现我妈发言稿是我写的吧晚上Co突然说不......
  • CSP2023 游记
    CSP2023游寄死的非常彻底呢...小y死,速归周五复习了一些图论的板子,多测没清空,rp--周六上午写了ST表,看了看KMP和Manacher,发现忘差不多了,有点慌,rp--(此处伏笔看到了J组的题,T3居然还是大模拟,心道不好(伏笔++中午出门晚了一点,又有一点点慌,rp--进考场的时候大概是......