十年程序员难倒了一个算法上面,真的老了

2022-11-15 17:40:20 +08:00
 diandian666

如题,各位大佬摸鱼的时间看看怎么解决!!感谢! 感恩!思密达!

公司业务需要,把我难倒了。各位大佬看看能不能摸鱼的时间来看看这个需求。代码递归跑的内存都溢出了,万分感谢。

题目:

有两组数字数组数据,数组 1 的数据的总和 = 数组 2 数据的总和。数组 1 的数量 <= 数组 2 的数量。且数组 1 中每一个数字都可以对应数组 2 中 N 个数字的和。找出数组 1 中的数字对应数组 2 中的数据。不能重复使用。 注:不用担心匹配不上的情况,这两组数据都是有根据出来的,绝对能匹配成功,之前都是人工匹配的,现在想用代码直接取代人工。

题目说的有点不清楚,举例:

数组 1: [62.13,26.67,17.76]

数组 2:[24.92,5.88,5.04,3.64,3.45,3.36,2.8,2.8,2.52,2.24,2.24,2.24,1.96,1.96,1.8,1.68,1.4,1.4,1.4,1.2,1.2,1.15,1.12,1.12,1.12,1.12,1.12,0.84,0.84,0.84,0.84,0.84,0.84,0.84,0.84,0.84,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.4,0.4,0.4,0.4,0.4,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28]

最终需要匹配出来结果

62.13=>[24.92,5.88,5.04,3.64,3.45,2.8,2.8,2.52,2.24,2.24,2.24,1.96,1.2,1.2],

26.67=>[1.96,1.68,1.4,1.15,1.12,1.12,0.84,0.84,0.84,0.84,0.84,0.56,0.56,0.56,0.56,0.56,0.56,0.56,0.4,0.4,0.4,0.4,0.4,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28]

17.76=>[3.36,1.8,1.4,1.4,1.12,1.12,1.12,0.84,0.84,0.84,0.84,0.56,0.56,0.56,0.56,0.56,0.28]

上面就是匹配的结果。

我这边多提供两组数据供测试,下面的两组测试成功的话,再尝试上面提到的那组数据,毕竟上面那组数据多,影响测试

第一组:

数组 1 [52.7,8.96]

数组 2 [21.44,6.72,5.44,5.12,4.48,3.20,2.24,1.92,1.92,1.92,1.28,1.28,1.00,0.96,0.50,0.32,0.32,0.32,0.32,0.32,0.32,0.32]

第二组:

数组 1 [23.17,3.2,1.22,0.32]

数组 2 [7.36,4.16,3.20,1.69,1.28,1.28,0.96,0.96,0.90,0.64,0.64,0.64,0.50,0.50,0.32,0.32,0.32,0.32,0.32,0.32,0.32,0.32,0.32,0.32

]

23969 次点击
所在节点    程序员
207 条回复
smallWang
2022-11-15 17:47:56 +08:00
这排列组合也太多了吧 你 N 的范围有确定吗? 人工作也挺痛苦的啊
muchenlou
2022-11-15 17:48:16 +08:00
好家伙,有点意思。下意识想到的是穷举
diandian666
2022-11-15 17:50:26 +08:00
@smallWang N 的范围不确定的。这花了我两天时间写。后面举例的两组数据自己本地测试都能匹配成功。放到线上一跑,就有其他的匹配不成功(原题那组匹配不成功),虽然自己也知道问题出在哪,但是还是不懂怎么写下去了...
tusj
2022-11-15 17:50:55 +08:00
人工匹配的老哥,是真的有点牛逼。这 N 也没个限制,人工一般要匹配多久?
w88975
2022-11-15 17:51:26 +08:00
举例的话, 建议你拿一些简单的数字, 这眼睛都看花了
lambdaq
2022-11-15 17:52:52 +08:00
好家伙,搁这在对账呢。。。
diandian666
2022-11-15 17:55:12 +08:00
@tusj 我前面也怀疑这人工怎么匹配。就原题那组,我匹配了 62.13 这个。剩下两个数字 26.67,17.76 我代码匹配不到。我发给他们人工匹配剩下两个数字。几分钟不到就给我匹配出来了。惊掉我下吧,不能发图,不然你们估计也惊掉下巴......
dallaslu
2022-11-15 17:56:07 +08:00
数据复杂了肯定存在不唯一的解……另外这是在凑发票吗?
diandian666
2022-11-15 17:56:20 +08:00
@w88975 简单的数据,自己都可以按规则弄点简单的。但是代码跑可以用我提供的那几组。
quan01994
2022-11-15 17:56:46 +08:00
第一感觉只能穷举啊 , ,,,,
zqxjoe
2022-11-15 17:57:05 +08:00
@lambdaq 看起来还真像对账用的
liyang5945
2022-11-15 17:57:07 +08:00
你倒不如说下原始的需求
pual
2022-11-15 17:57:22 +08:00
二分图匹配,匈牙利算法
wangnimabenma
2022-11-15 17:57:35 +08:00
这个运营得是研究生吧,我大专生可做不了这个
wfd0807
2022-11-15 17:58:07 +08:00
循环×动态规划
diandian666
2022-11-15 17:58:25 +08:00
@lambdaq 这也可以说算是。他是匹配到了之后,用个字段关联起来的。相当于把数据关联起来。没有关联的字段。这也有运营的一个问题在这里。
diandian666
2022-11-15 17:59:56 +08:00
@wfd0807 这是什么操作。我也是循环,递归,最终还是发现问题解决不了...有空可以试下,当作自己的锻炼啥也行,帮助我这个准备被 IT 淘汰的也好。哈哈哈
diandian666
2022-11-15 18:00:33 +08:00
@dallaslu 不是凑发票。就是亚马逊运营的数据需要关联起来。
diandian666
2022-11-15 18:01:38 +08:00
@liyang5945 需求就是 两组数据。进行匹配呢,我得到的需求也是这样。只不过我能找到这两组数据,我提供出来而已。
diandian666
2022-11-15 18:02:06 +08:00
@pual 这好高级啊。听都没听过。擦....尴尬。大佬求教

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX