0

如何优雅的解这个题?

 1 year ago
source link: https://www.v2ex.com/t/874486
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  Python

如何优雅的解这个题?

  Gawain · 1 小时 18 分钟前 · 569 次点击

a=[1,2,3,4,5,6,7,8]

b=[1,2,3,4,5,6,7,8]

b=[1,2,3,4,5,6,7,8]

已知 a + b + c = 16

求全部 abc 的组合

线性代数还是数组啥的,都还给老师了,只会 for 循环了...

16 条回复    2022-08-22 11:57:32 +08:00
Itoktsnhc

Itoktsnhc      1 小时 16 分钟前

呃 这是《三数之和》吗
Itoktsnhc

Itoktsnhc      1 小时 14 分钟前

@Itoktsnhc
如果是三数之和, 一般是做好排序,在循环中固定其中一个值,然后左右两侧指针遍历才能保证单调性。
fkdtz

fkdtz      1 小时 4 分钟前

我先努力优雅的读懂这个题
JasonLaw

JasonLaw      1 小时 4 分钟前 via iPhone

我不太理解“ 已知 a + b + c = 16”,a 、b 、c 不是数组吗?
JasonLaw

JasonLaw      1 小时 3 分钟前 via iPhone

@fkdtz #3 me too
singerll

singerll      55 分钟前

题干里面是等于还是属于。。。
如果是属于,b+c=16-a ,先列举 a 的值,再确定 b+c 的数组边界,然后在边界里面循环吧。比如 1+1+1 的组合,是不需要循环的。
lyang

lyang      41 分钟前

思考的时间,代码已经写完了,for 循环还好吧
kiroter

kiroter      40 分钟前   ❤️ 1

先遍历 a,b 相加得 ab, 在转 map ,遍历 c, key = 16-3, ab.get(key)
kiroter

kiroter      40 分钟前

key=16-c
FYFX

FYFX      24 分钟前

你给的这个例子就这个数据量为什么不循环,还是说这只是题目中的一个测试用例?
BeautifulSoap

BeautifulSoap      14 分钟前 via Android

9 楼思路对的,把 a 和 b 相加然后用 16 一个个去减,结果到 c 里找,存在的话就是对应的组合只需要 8x8+64 次计算,比穷举的 8x8x8 好

可问题在于上面说的,总共就这么小的数组,直接穷举也没问题
Gawain

Gawain      11 分钟前

@JasonLaw
@fkdtz
@singerll

我的错,应该 a b c 属于三个数组,是其中之一,相找这样的组合
Gawain

Gawain      8 分钟前

@FYFX
@BeautifulSoap

实际问题虽然不是这么小的数组,但是也多大,确实可以循环穷举。

但是总觉得这样不够优雅

在想是不是有别的数学方法 比如用 nump 数组操作之类的 但是这方面的知识早就忘光了

总之,穷举完全没问题,就是抱着学习的态度,问问有没有别的方法
Gawain

Gawain      5 分钟前

@cccjh

非常感谢

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK