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.循环遍历每个栈 stackpiles 中:

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()

2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。的更多相关文章

  1. 《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny

    问题 执行若干个任务,只需要对其中任意一个的完成进行响应.这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成.例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的. ...

  2. java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

    package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Test { /* * 将任 ...

  3. VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  4. pojg2744找一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。

    http://poj.grids.cn/practice/2744 描述现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是 ...

  5. 【剑指offer】找出数组中任意一个重复的数字,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同.如果存在重复数字,则在排序的过程中会出现不同下标对应 ...

  6. 给定任意一个字符串,使用 for in 语句来统计字符出现的个数

    //找出字符串中的数字 var str = 'haj123sdk54hask33dkhalsd879'; /*function findNum(str){ var arr = []; var tmp ...

  7. 获取页面中任意一个元素距离body的偏移量

    //offSet:等同于jQuery中的offSet方法,获取页面中任意一个元素距离body的偏移量function offSet(curEle) { var totalLeft = null; va ...

  8. [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现

    题目: 6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少? 10 = 6 + 4         4 18 = 10 + 8        4 + 4  32 = 18 + 14 ...

  9. SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset

    SQL得到任意一个存储过程的参数列表sp_procedure_params_rowsetexec sp_procedure_params_rowset 'up_rpt营业收入汇总表' PROCEDUR ...

  10. 百度地图marker点击任意一个当前的变化,其余的marker不变

    百度地图marker点击任意一个当前的变化,其余的marker不变 最近做的百度地图,遇到一个问题,就是在for循环里面执行marker的点击事件 没有可以比对的对象,每次点击marker的时候,i都 ...

随机推荐

  1. NC51111 Atlantis

    题目链接 题目 题目描述 There are several ancient Greek texts that contain descriptions of the fabled island At ...

  2. Event对象

    Event对象 Event对象表示在DOM中出现的事件,在DOM中有许多不同类型的事件,其主要使用基于Event对象作为主接口的二次接口,Event对象本身包含适用于所有事件的属性和方法. 描述 事件 ...

  3. 新零售SaaS架构:什么是订单履约系统?

    什么是订单履约系统? 订单履约系统用来管理从接到销售订单,到把货品送到客户手中的整个业务过程.它是上游交易(如销售和客户下单环节)和下游仓储配送(如库存管理.物流)之间的桥梁,确保信息流的顺畅和操作的 ...

  4. win32 - 创建无GUI的消息循环(包含线程窗口的说明)

    创建win32窗口需要注册,回调函数一些操作,如果我们不需要窗口的话,可以使用下面代码获得一个仅有消息循环的控制台. ps: 这样做主要对一些不需要窗口但需要消息循环的程序特别有用,比如蓝牙回调. # ...

  5. Postman文件数据导入导出

    https://zhuanlan.zhihu.com/p/535757471?utm_id=0

  6. nginx中自带的一些变量参数说明

    $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...

  7. cmake安装及报错解决办法

    安装 yum install cmake 报错 centOS8(x86_64 或 aarch64) 系统下 yum或dnf 默认安装的 cmake-3.18.2-11.el8版本,安装后无法使用,出现 ...

  8. 【Azure Key Vault】客户端获取Key Vault机密信息全部失败问题分析

    问题描述 在应用中获取存储在Azure Key Vault的机密信息,全部失败. 报错日志内容如下: [reactor-http-epoll-4] [reactor.netty.http.client ...

  9. 【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中

    问题描述 是否可以将Swagger 的API定义导入导Azure API Management中? 操作步骤 是的,可以通过APIM门户导入单个的API Swagger定义文件.具体步骤如下: 第一步 ...

  10. C# 一些类名的后缀及其意义

    C# 中有常见的以以下名称为后缀的类型,笔者总结了一下大概用途. 目录 Extensions Helper 或 Helpers Scheme Builder Context Factory Provi ...