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都 ...
随机推荐
- layui弹出层:使用icon图标小结
转自:https://www.cnblogs.com/webSnow/p/15470350.html layui弹出层:使用icon图标小结 Layui 踩坑篇layui的弹框插件layer中,有很多 ...
- 从零开始手写 redis(三)内存数据重启后如何不丢失?
前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 我们在 从零手写 cache 框架(一)实现过期特性 中实现了 key 的过期特性. 本节,让我 ...
- elasticstack-7.5.0部署实战
1.Elastic Stack 数据搜索.分析和可视化工具 中文网: https://elkguide.elasticsearch.cn/beats/metric.html Elasticsearch ...
- Java集合框架学习(十四) Iterator接口详解
Iterator接口介绍 public interface Iterator<E> iterator 用于迭代集合类型对象,例如: HashMap, ArrayList, LinkedLi ...
- Spring源码之-AOP
目录 一.大话AOP 1.AOP的概念 2.必要的准备工作 什么是代理模式? 3.大话AOP 那么AOP 具体是什么呢? 实现AOP的方式 二.动态AOP自定义标签 1.JDK动态代理 2.CGLIB ...
- Java Http客户端选型
JDK自带 HTTPURLConnect:功能单一 Apache HttpClient https://hc.apache.org/index.html 是一个比较古老的HTTP框架,使用非常普遍. ...
- node版本管理工具nvm的安装及使用
一.什么是nvm nvm是一个node版本管理工具. 由于不同项目依赖的node版本可能不同,所以在维护多个项目时通常需要使用不同的node版本,这时候用nvm来切换不同的node版本就很方便. 官方 ...
- flask操作mongodb
一个简单的注册登录 from pymongo import MongoClient MC = MongoClient('127.0.0.1', 27017) MongoDB = MC['s2'] #创 ...
- CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂
中间件 1.服务器中间件:nginx,apache 2.数据库中间件:介于应用程序和数据库之前的,MyCat 3.消息队列中间件:kafka,rabbitmq,Rocketmq CGI 1.CGI是一 ...
- 2-Django之三板斧
HttpResponse 返回字符串类型的数据 HttpResponse: 这是 Django 自带的类,用于构建基本的 HTTP 响应 我的app名称是demo,我们先按照正常的流程,在views中 ...