首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从

2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币,

每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。

给你一个列表 piles ,其中 piles[i] 是一个整数数组,

分别表示第 i 个栈里 从顶到底 的硬币面值。同时给你一个正整数 k。

请你返回在 恰好 进行 k 次操作的前提下,你钱包里硬币面值之和 最大为多少?

输入:piles = [[1,100,3],[7,8,9]], k = 2。

输出:101。

答案2024-03-23:

来自左程云。

灵捷3.5

大体过程如下:

1.初始化变量:定义一个dp数组用于记录计算过程中的最大值,长度为k+1,初始值全为 0。

2.循环遍历每个栈stack在piles中:

2.1.对于每个栈stack,从最大次数k开始递减到 1:

2.1.1.定义变量sum用于记录当前栈取出的硬币总和。

2.1.2.遍历从 1 到min(栈的长度, 次数)的取数次数i:

2.1.2.1.计算当前次数下取的硬币总和并更新到sum中。

2.1.2.2.更新dp[次数]为当前dp[次数]与取出当前硬币后的最大值(sum + dp[次数-i])的较大者。

3.返回dp[k],即完成k次操作后的最大硬币面值之和。

4.时间复杂度:

• 遍历每个栈需要 O(n) 的时间,n 为栈的数量。

• 每个栈内部的计算复杂度为 O(k * m),其中 m 为栈内硬币的数量。

• 因此,总的时间复杂度为 O(nkm)。

5.空间复杂度:

• 需要额外的dp数组来存储计算所需的值,长度为 k+1,即 O(k) 的额外空间。

• 因此,总的额外空间复杂度为 O(k)。

Go语言代码如下:

package main

import (

"fmt"

"math"

)

func maxValueOfCoins(piles [][]int, k int) int {

dp := make([]int, k+1)

for _, stack := range piles {

for w := k; w > 0; w-- {

var sum int

for i := 1; i <= int(math.Min(float64(len(stack)), float64(w))); i++ {

sum += stack[i-1]

dp[w] = int(math.Max(float64(dp[w]), float64(sum+dp[w-i])))

}

}

}

return dp[k]

}

func main() {

piles := [][]int{{1, 100, 3}, {7, 8, 9}}

k := 2

result := maxValueOfCoins(piles, k)

fmt.Println(result)

}

在这里插入图片描述Python语言代码如下:

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

def max_value_of_coins(piles, k):

dp = [0] * (k+1)

for stack in piles:

for w in range(k, 0, -1):

sum_val = 0

for i in range(1, min(len(stack), w)+1):

sum_val += stack[i-1]

dp[w] = max(dp[w], sum_val + dp[w - i])

return dp[k]

def main():

piles = [[1, 100, 3], [7, 8, 9]]

k = 2

result = max_value_of_coins(piles, k)

print(result)

if __name__ == "__main__":

main()

在这里插入图片描述

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OuEnblGMjOoNI-Og1dePhGpA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券