2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。
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:
来自左程云。
大体过程如下:
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()

2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。的更多相关文章
- 《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny
问题 执行若干个任务,只需要对其中任意一个的完成进行响应.这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成.例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的. ...
- java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果
package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Test { /* * 将任 ...
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- pojg2744找一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
http://poj.grids.cn/practice/2744 描述现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是 ...
- 【剑指offer】找出数组中任意一个重复的数字,C++实现
原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同.如果存在重复数字,则在排序的过程中会出现不同下标对应 ...
- 给定任意一个字符串,使用 for in 语句来统计字符出现的个数
//找出字符串中的数字 var str = 'haj123sdk54hask33dkhalsd879'; /*function findNum(str){ var arr = []; var tmp ...
- 获取页面中任意一个元素距离body的偏移量
//offSet:等同于jQuery中的offSet方法,获取页面中任意一个元素距离body的偏移量function offSet(curEle) { var totalLeft = null; va ...
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
题目: 6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少? 10 = 6 + 4 4 18 = 10 + 8 4 + 4 32 = 18 + 14 ...
- SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset
SQL得到任意一个存储过程的参数列表sp_procedure_params_rowsetexec sp_procedure_params_rowset 'up_rpt营业收入汇总表' PROCEDUR ...
- 百度地图marker点击任意一个当前的变化,其余的marker不变
百度地图marker点击任意一个当前的变化,其余的marker不变 最近做的百度地图,遇到一个问题,就是在for循环里面执行marker的点击事件 没有可以比对的对象,每次点击marker的时候,i都 ...
随机推荐
- Google搜索操作符:让你秒变搜索专家
搜索引擎对互联网的重要性不言而喻,不过,随着ChatGPT及其类似AI工具的推出,对搜索引擎带来了前所未有的挑战. 因为ChatGPT具有自然语言处理能力,能够更好地理解用户的搜索意图,提供更准确.更 ...
- NVME(学习笔记八)—Asymmetric Namespace Report
8.20 非对称namespace访问报告 8.20.1 非对称namespace访问报告概况 非对称Namespace访问(ANA)在如下场景下产生,基于访问这个namespace的controll ...
- Transform LiveData
查询资料的其中一个场景: 创建一个回调函数,当查询后台的时候,后台有结果了,回调对应的回调函数,并将结果保存到LiveData中. public class DataModel { ... ...
- CentOS在无网络环境下,用离线源yum安装软件
先说大致步骤: 1.前提假设:当前无网络的目标服务器是A,我们需要先准备一台服务器B: 2.在B上面用yum先把软件安装完成. 3.然后用createrepo将B中的包拷贝出来,并传到A上(用U盘或者 ...
- js数组类型
js数组类型: 数组检测 1.判断变量是否为数组类型: arr1 instanceof Array Array.isArray(arr1); true 转换方法 toString()方法,以便返回数组 ...
- 使用SYS_CONTEXT
使用SYS_CONTEXT 1.什么是SYS_CONTEXT? SYS_CONTEXT 函数是Oracle提供的一个获取环境上下文信息的预定义函数. 该函数用来返回一个指定namespace下的par ...
- iptables临时控制某ip访问权限
iptables -A INPUT -p tcp -s {src_ip} --dport 80 -j ACCEPT iptables -A INPUT -p tcp -s {src_ip} --dpo ...
- 【WiFi开发全攻略】WIFI基础知识大全
[WiFi开发全攻略]WIFI基础知识大全 1. Wi-Fi起源 现在我们大家对Wi-Fi肯定都不陌生,无论是笔记本,手机,智能电视,都离不开Wi-Fi.目前我们一般用的都是Wi-Fi5,Wi-Fi6 ...
- Python函数每日一讲 - 一文让你彻底明白hasattr函数的使用
引言 在Python编程中,经常会遇到需要判断对象是否具有某个属性的情况.这时候就可以用到Python内置函数 hasattr().本文将深入探讨 hasattr() 函数的使用方法及其在实际编程中的 ...
- ThreadPoolExecutor和Executors的区别
Executors创建的线程有两类 newFixedThreadPool和newSingleThreadExecutor,队列数量弹性,创建的线程的队列最大值为INTEGER.max容易造成OOM n ...