面试算法题:扑克牌问题,逆过程分析

这是面试的时候碰到的问题

由于当时没有进入算法的状态

实现的不是特别的优雅


就是手上有一堆牌

先取顶上一张放到桌上

再取顶上一张放到这堆牌的底部

以此类推

给了你最后桌上的序列

求你原来手上牌的序列


很快就可以分析出来

先取顶上一张放到桌上

再取顶上一张放到这堆牌的底部

可以转化为

“隔一张

放一张到桌上

再对剩下的牌做同样的操作”


我当时发现逆序是真TM的难求

所以用一个HashMap存了index

然后对index操作

最后还原

这样不太好


先从正序思考一遍




所以如果我们想逆序

需要从牌的数目

确定我们逆序的情况

比如这里是6

毫无疑问第一轮下来剩下3个

第二轮剩下1个

这样分析就明朗了

只要确定每次操作

牌的数目有几张

就可以快速解决了


数目的话

再类推下

比如11:11、5、2、1

就是n/2

所以我们需要一个数组把每次的操作的牌数存下来

对应这个例子就是

11 5 2 1

那如果我们假设桌上的牌的序列是x1(最后的)到x11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值