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

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

时间:2024-03-23 19:11:19浏览次数:244  
标签:piles 硬币 sum 移除 go 2.1 stack dp

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

在这里插入图片描述

标签:piles,硬币,sum,移除,go,2.1,stack,dp
From: https://www.cnblogs.com/moonfdd/p/18091558

相关文章

  • 03天【代码随想录算法训练营34期】第二章 链表part01(203.移除链表元素 、707.设计链表
    203.移除链表元素竟然可以做个假head,学到了classListNode(object):def__init__(self,val=0,next=None):self.val=valself.next=nextclassSolution(object):defremoveElements(self,head,val):dummy_head=ListNode(-1)......
  • MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
    打开mongoDB的mongoshell,出现以下提示,此时输入任意键都会退出界面,无法进行命令输入。这时,我们首先在网址栏中输入http://localhost:27017/是否连接到27017端口,如果返回结果如下:接着在cmd命令提示符中输入mongod,确认MongoDB服务器是否启动,返回结果如下:从红色框标记的部分......
  • google
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>GoogleLogo</title><style>......
  • golang interface转int
    varres[]orm.Params//切片map,value为interface;//获取当前时间now:=time.Now()//获取30天前的时间thirtyDaysAgo:=now.AddDate(0,0,-30)//将时间转换为时间戳timestamp:=thirtyDaysAgo.Unix()sql:=fmt.Sprint("SELECTcount(*)asnum,media.idasarticle_id,m......
  • 创建Django项目
    安装相关的包pipinstalldjango创建流程项目目录移除模板位置,同时删除最外面的模板文件夹templates快速创建应用注册应用注册路由视图相关模板#静态资源{%loadstatic%}<linkrel="stylesheet"href="{%static'/css/font.css'%}"><scriptsrc="{%st......
  • 【Godot4自学手册】第二十七节自定义状态机完成看守地宫怪物
    本节,我将使用自定义状态机实现看守地宫怪物,完成了基础类State,状态机类StateMachine的编码,实现了怪物的闲置巡逻类、追踪类和攻击类,以及对应动画等。这节代码有点多,不过还好,代码比较简单。最终效果如下:一、基本概念状态机(StateMachine)是有限状态自动机的简称,是指一个数学......
  • Golang: Redislock源码分析
    Golang:Redislock源码分析源码https://github.com/bsm/redislock实现Lua脚本obtain.lua--obtain.lua:arguments=>[value,tokenLen,ttl]--Obtain.luatrytosetprovidedkeys'swithvalueandttliftheydonotexists.--Keyscanbeoverrideniftheyal......
  • My understanding of pedagogic metalanguage in "The Three-Body Problem "
    ......
  • https://github.com/google/adb-sync
    大致的实现方式:是一个python文件,在windows上就pythonadb-sync-R-t-n--dry-run/storage/emulated/0C:\a\b这样运行 其中本机系统的文件列表和修改时间获取就用os库(importos)手机上的文件列表和修改时间获取就用ls-al     https://blog.csdn.net/chabb/ar......
  • mongoDB使用记录:副本集选举淘汰策略失效
    一个问题场景:业务请求查询数据库,当请求没有成功返回时(这里是数据库机器异常,表现是不返回请求结果,处于假死状态),业务挂起进入等待(WAIT),逻辑中断,表现为卡顿、持续加载中;高并发场景下,短时间内堆积的请求会大量占用发起数据库请求的机器的内存(风险一),大量业务卡顿异常;当数据库异常解决成......