2022-01-26:最优账单平衡。
一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x, y, z) 表示一次交易,表示 x 借给 y 共计 z 美元。用 0, 1, 2 表示小爱同学、小新同学和小明同学(0, 1, 2 为人的标号),上述交易可以表示为 [[0, 1, 10], [2, 0, 5]]。
给定一群人之间的交易信息列表,计算能够还清所有债务的最小次数。
注意:
一次交易会以三元组 (x, y, z) 表示,并有 x ≠ y 且 z > 0。
人的标号可能不是按顺序的,例如标号可能为 0, 1, 2 也可能为 0, 2, 6。
力扣465。

答案2022-01-26:

状态压缩的动态规划。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
trans := [][]int{{0, 1, 10}, {1, 0, 1}, {1, 2, 5}, {2, 0, 5}}
ret := minTransfers2(trans)
fmt.Println(ret)
} func minTransfers2(transactions [][]int) int {
debt := debts(transactions)
fmt.Println(debt)
N := len(debt)
sum := 0
for _, num := range debt {
sum += num
}
dp := make([]int, 1<<N)
for i := 0; i < 1<<N; i++ {
dp[i] = -1
}
return N - process2(debt, (1<<N)-1, sum, N, dp)
} func process2(debt []int, set, sum, N int, dp []int) int {
if dp[set] != -1 {
return dp[set]
}
ans := 0
if (set & (set - 1)) != 0 {
value := 0
max := 0
for i := 0; i < N; i++ {
value = debt[i]
if (set & (1 << i)) != 0 {
max = getMax(max, process2(debt, set^(1<<i), sum-value, N, dp))
}
}
ans = twoSelectOne(sum == 0, max+1, max)
}
dp[set] = ans
return ans
} func debts(transactions [][]int) []int {
map0 := make(map[int]int)
for _, tran := range transactions {
map0[tran[0]] += tran[2]
map0[tran[1]] -= tran[2]
}
N := 0
for _, value := range map0 {
if value != 0 {
N++
}
}
debt := make([]int, N)
index := 0
for _, value := range map0 {
if value != 0 {
debt[index] = value
index++
}
}
return debt
} func getMax(a, b int) int {
if a > b {
return a
} else {
return b
}
} func twoSelectOne(c bool, a, b int) int {
if c {
return a
} else {
return b
}
}

执行结果如下:


左神java代码

2022-01-26:最优账单平衡。 一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x的更多相关文章

  1. VS Code 调教日记(2022.6.26更新)

    VS Code 调教日记(2022.6.26更新) 基于msys2的MinGW-w64 GCC的环境配置 下载并安装msys2 到路径...msys2安装路径...\msys64\etc\pacman ...

  2. .net NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022

    1.问题由来 在做一个导入的需求时,测试导入模板,无论导入模板里的日期设置成何种日期格式到代码中都会提示有不正确的格式化数据,加断点调试发现,导入的日期如:Excel表格中是2022/5/26,断点看 ...

  3. 最新版 IDEA 2022.3.2 最优开发配置

    最新版 IDEA 2022.3.2 最优开发配置 教程最后更新时间:2023.3.1 安装好 IntelliJ IDEA 后,进行如下的初始化操作,工作效率提升10倍. 目录 一.全局配置 如何进入全 ...

  4. 微信小程序使用场景延伸:扫码登录、扫码支付

    微信小程序使用场景延伸:扫码登录.扫码支付 小程序最适合的使用场景有哪些?相比大家能列举出来很多,但这个场景,大家可能多数没想到_^ 笔者团队近期接到了一个PC项目:转转游戏租号PC官网,该项目要求在 ...

  5. 【译】调优Apache Kafka集群

    今天带来一篇译文“调优Apache Kafka集群”,里面有一些观点并无太多新颖之处,但总结得还算详细.该文从四个不同的目标出发给出了各自不同的参数配置,值得大家一读~ 原文地址请参考:https:/ ...

  6. 杠杆(leverage)就是支付保证金借钱进行交易,以小博大

    杠杆(leverage)就是支付保证金借钱进行交易,以小博大: 比如你自己有100块,在向券商借100块,这就是杠杆交易了,杠杆简单地说来就是一个乘号,使用这个工具,可以放大投资的结果,无论最终的结果 ...

  7. web安全学习笔记(2022/8/26)

    网络安全Web学习笔记 @author: lamaper @email: lamaper@qq.com @blog: lamaper - 博客园 (cnblogs.com) @date: Aug.26 ...

  8. [LeetCode] Optimal Account Balancing 最优账户平衡

    A group of friends went on holiday and sometimes lent each other money. For example, Alice paid for ...

  9. [LeetCode] 465. Optimal Account Balancing 最优账户平衡

    A group of friends went on holiday and sometimes lent each other money. For example, Alice paid for ...

  10. JZOJ 2022.02.26【提高A组】模拟

    比赛总结 考场 \(T1,T2\) 思想切了 然而... \(\text{T1}\) 飞行棋 当然要 \(dp\),然而发现后六格有后效性 姑且设 \(f_i\) 表示从第 \(i\) 格到终点的期望 ...

随机推荐

  1. mysql 排序ROW_NUMBER() RANK() DENSE_RANK()

    with 月业绩 as (SELECT 年份,月份, ROUND(sum(总业绩)/100000) 业绩 FROM `myj` group by 年份,月份) select * ,ROW_NUMBER ...

  2. Java笔记第三弹

    Map集合的获取功能 V get(Object key);//根据键获取值 Set<K> keySet();//获取所有键的集合 Collection<K> values(); ...

  3. 集训第二周计划:把cf近期的div2除了最后一题给切完

    太菜了太菜了,弄个训练计划. 晚上没事干的时候我想把博客园皮肤改一下,搜着搜着不知道怎么回事点进去一些竞赛选手的博客,比如这个 https://www.cnblogs.com/soda-ma/p/13 ...

  4. 学习在UMG中创建列表(List View)

    原理 列表中的元素被称为 "Item",每个Item都是一个UObject.你需要为列表指定它的Entry.Entry也是个控件蓝图,它指定了针对于一个Item,它的界面是什么样子 ...

  5. ByteHouse:基于 ClickHouse 的实时计算能力升级

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 ByteHouse 是火山引擎数智平台旗下云原生数据分析平台,为用户带来极速分析体验,能够支撑实时数据分析和海量离 ...

  6. flutter widget---->Spacer

    如果你想灵活控制Flex容器(Row, Column)中子组件中的间隔,可以考虑使用Spacer.下面以Row为例子,来为它的子组件添加间距. use Spacer import 'package:f ...

  7. Moho Pro - Mac 上一款专业的二维动画制作软件,强大的功能让你尽情发挥创意

    Moho,以前被称为动画工作室专业版,是最好的质量的2D动画软件之一.这个程序是理想的专业人士寻找一个更有效的替代方法来创建动画,没有繁琐的详细逐帧处理.具有直观的界面和现成的人物和附加对象(卡通对象 ...

  8. kafka rebalance你真的了解吗

    介绍 今天主要分享一下 kafka 的 rebalance,在 kafka 中,rebalance 是一个十分重要的概念,很多时候引发的一些问题可能都是由于 rebalance 引起的,rebalan ...

  9. 一款针对EF Core轻量级分表分库、读写分离的开源项目

    在项目开发中,如果数据量比较大,比如日志记录,我们往往会采用分表分库的方案:为了提升性能,把数据库查询与更新操作分开,这时候就要采用读写分离的方案. 分表分库通常包含垂直分库.垂直分表.水平分库和水平 ...

  10. golang 中的 cronjob

    引言 最近做了一个需求,是定时任务相关的.以前定时任务都是通过 linux crontab 去实现的,现在服务上云(k8s)了,尝试了 k8s 的 CronJob,由于公司提供的是界面化工具,使用.查 ...