12306 出票逻辑没那么难吧

2020-01-22 17:10:21 +08:00
 daboq

一辆车算 3000 张票
将每个站点都设置个标志位
0 为未出售 1 为已卖出
出 A-B 的票逻辑:
1.搜索有没有 A-B 标志位都为 0 的行 2.将该行 A-B 所有标志位设为 1

完全没难度啊,多一张票=多插入一行,大家看看这想法对不对
python 测试代码:

zhandian=['南通','如皋','泰州','江都','扬州','滁州北','蚌埠','合肥','庐江','桐城','安庆西','天柱山','太湖','南昌','吉安','信丰','龙川','河源','惠州','东莞东','深圳东']

#三千张票
tickets=[[0 for i in range(len(zhandian))] for x in range(3000)]
def by_ticket(start,end):
    start_index=zhandian.index(start)
    end_index=zhandian.index(end)
    if end_index<=start_index:
        # 站点输入错误
        return -3

    for t in tickets:
        if t[start_index:end_index+1]==[0 for i in range(end_index-start_index+1)]:
            t[start_index:end_index+1]=[1 for i in range(end_index-start_index+1)]
            print('买到座位号{}的票 位置详情:{}'.format(t[0],t))
            return t
    print('无票')
    return -1
7024 次点击
所在节点    编程
62 条回复
ifxo
2020-01-22 17:25:50 +08:00
本来就没什么难度,说难的基本上都是菜鸟吧
zaima
2020-01-22 17:30:34 +08:00
一辆车 3000 个座位把
daboq
2020-01-22 17:33:40 +08:00
@zaima 假设一辆车出 3000 张票 实际应该不到
aurthur
2020-01-22 17:35:26 +08:00
没毕业吧?
kindjeff
2020-01-22 17:37:34 +08:00
收藏了
daboq
2020-01-22 17:37:43 +08:00
@aurthur 那你说下逻辑哪里错了?
ayase252
2020-01-22 17:38:47 +08:00
空间复杂度 mn,时间复杂度 nm^2,m 是站数,n 是车票数。最 naive 的解法,想想还有没有可以优化的地方(面试感)

更别提还有区间锁票,每站预留这种操作了
zaima
2020-01-22 17:39:57 +08:00
@daboq 那按你的逻辑,极限不就可以出 3000 张起点到终点的票了?座位是确定的,票是不确定的,怎么可能用票来判断
daboq
2020-01-22 17:40:46 +08:00
@ayase252 预留可以改标志位 ,比如改成 2,不固定 0 才能买的 ,这只是个示例,锁票也一样
daboq
2020-01-22 17:41:33 +08:00
@zaima 可以添加的 仔细看题 插入一行就行
kkkkkrua
2020-01-22 17:43:07 +08:00
线下售票,电话售票,要更新
Flobit
2020-01-22 17:44:02 +08:00
你这只是线上购票,线下购票的呢?
virusdefender
2020-01-22 17:45:22 +08:00
你说淘宝为啥这么复杂,想想不也就一个库存减 1 然后订单表插入一行么,放在实际的环境中,需要考虑的太多了,比如用户认证、风控、优惠券、缓存、锁表、持久化,消息队列、分布式事务等等等等。
zaima
2020-01-22 17:49:30 +08:00
@daboq 车能载多少是根据座位来决定的啊。我座位只有 2000 个,你怎么可以出 3000 张起点到终点的票呢?我座位有 4000 个,你根据什么情况来插入新行啊?
zaima
2020-01-22 17:52:16 +08:00
@daboq 你的逻辑里没有出现座位这个常量
daboq
2020-01-22 17:54:39 +08:00
@zaima 站点和票数是可以变的,比如加个插入票什么的,而且实际肯定是在数据库中,这只是个测试代码
Qlccks2
2020-01-22 17:54:50 +08:00
也许很复杂,但是出票都是提前计算好的吧,并不是实时计算出票。
zaima
2020-01-22 18:06:25 +08:00
@daboq 你好好琢磨下把……为什么你的逻辑里,唯一确定的两个变量之一的 “座位” 这个变量没出现?另外,你只要假设是 3000 个座位而不是票的话,那么逻辑上并没有什么问题
newtype0092
2020-01-22 18:11:11 +08:00
确实简单,三流小电商站的水平,钱都被层层剥削贪污了。
建议你自己开发一套,卖给铁老大,要价 5 亿不接受还价,后半辈子吃穿不愁了。
Torpedo
2020-01-22 18:12:22 +08:00
你这只是单一的逻辑。当大量用户买票的时候,同步你这个票务信息、决定谁买到票复杂度会上升。

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

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

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

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

© 2021 V2EX