研究一下这个面试题特此记录,题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手里没有牌.最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组。

第一种:逆推一下。拿一张放手里,然后再拿一张放在上面。这种先不提。

第二种:先将1...n的牌顺序排列,以N为5为例,然后按照题目中描述的步骤重新排列得到[1 3 5 4 2].将得到的牌面上的数字,替换成该数字的索引对应的牌面数字[1 5 2 4 3] (这里索引要从1开始),最终得到的顺序就是题目要求的结果.

说说第二种,很多人不理解为什么数字和角标对调了就是正确答案呢。

其实这里的关键点是:1、另数组的角标从1开始。 2、这样数据是 1、2、3、4、5;角标也是1、2、3、4、5。 那么对调后其实是逆序模仿了执行过程。好吧这么说还是不太好理解 ,那么直接上图。

1、原有数组  ---- > 并按照规则执行

2、如上图我们给执行过规则的扑克堆加上角标(index)。  你会发现 角标不就是 1、 2、3、4、5吗?这和题目上说的执行完桌子上的牌1到N有序一样(这是废话,数据角标必然有序)。那么有意思的来了,我们是执行了最上面的数组得来的这个有序的index 数组。我们带着index来还原一下是不是就OK了呢?好的 ,我把数组切开进行还原,如图:

这时我们只观察红框里的index是不是就是答案了呢,1 5 2 4 3 ->>执行游戏规则 -->> 1 2 3 4 5。

3、其实第二种解题思路中的  数组和角标互换位置就是在带着index还原。即角标变为数字并且存放在数字的位置,例如 2 变为数字,存放在3号位置。细心的同学已经发现 这和第三个数组一致,没错已经实现了还原。因为对换位置之后角标有序,所以数字跟着移动。

好了到这应该说明白了,不明白的多看几次吧。这种算法会满足其他复杂规则。因为执行完规则,我都拿到了最后的结果。顺着角标还原即为正确答案。

一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手里没有牌.最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组相关推荐

  1. 扑克牌面试问题:从牌顶拿出一张牌放到桌子上,再从牌顶拿一张牌放在手上牌的底部,重复第一步、第二步的操作

    前几天一同事去xx头条面试前端开发,遇到了一个面试问题,当时面试官是希望他通过当场思考以后说出答案,并说出解答的思路,问题是这样的: 我手中有一堆扑克牌, 但是观众不知道它的顺序. 1.第一步, 我从 ...

  2. 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

    题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手上没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组.(题目来源于一篇知乎上的文章) 思路: 在原牌堆 ...

  3. 面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌。根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组。

    面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌.根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组. import java.util.LinkedList; i ...

  4. 面试题:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

    面试题:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组 思路如下:由题意可知存在两种操作,1.摸牌:2 ...

  5. 【Java】 实现一副扑克牌,包含:洗牌+发牌(3个人,一人5张)+输出牌的信息 的逻辑

    import java.util.ArrayList; import java.util.List; import java.util.Random;class Card{private int ra ...

  6. 小明左、右手中分别拿两张纸牌(比如:黑桃10和红桃8,数字10和8可通过键盘录入),要求编写代码交换小明手中的牌

    package zuoye;import java.util.Scanner;public class Test7 {public static void main(String[] args) {/ ...

  7. ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7

    这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...

  8. 利用Python在Jetson TX2上抓取和显示摄像头影像

    小编来自水下机器人社区193369905,里面小编给出了很多资料 在本贴中,小编"我"分享了如何使用python 代码(及 OpenCV)在Jetson TX2上抓取和显示摄像头影 ...

  9. idea从git上拉取并管理项目

    idea从git上拉取并管理项目 1:idea从git上拉取项目 (1)FILE --> New --> Project from Version Control --> Git ( ...

最新文章

  1. java package private,Java中的public,protected,package-private和private有什么区别?
  2. 第二弹:超全Python学习资源整理(进阶系列)
  3. 使用itextpdf操作pdf
  4. php基础不好,基础不好,问个php类调用的初级问题
  5. bootstrap带有下拉按钮的输入框_关于bootstrap--表单(下拉select、输入框input、文本域textare复选框checkbox和单选按钮radio)...
  6. 扫地机器人单扫和双扫_小米扫拖机器人体验:再见了,拖把君
  7. 一次MySQL线上慢查询分析及索引使用
  8. leetcode 746 python 动态规划
  9. 【金融工程实验】【matlab】使用candle函数画日均k线图
  10. Object类的用法(二)
  11. phpstudy配置SSL证书的步骤(Apache环境)以及一些注意事项
  12. matlab保留有效数字指数形式,Matlab中数值计算精度
  13. 何通过ArcCatalog本地发布地图服务
  14. windows操作系统下新建txt文件快捷键
  15. javaweb调用qq认证登录接口
  16. 关于浏览器提示“隐私设置错误/证书错误导航已阻止”之 网站证书过期解决方案
  17. 七夕活动主题html邮件,七夕节活动策划方案,七夕创意活动主题
  18. Ubuntu18.04安装RTL8125/RTL8168等网卡驱动程序
  19. toString方法重写
  20. DDS信号发生器原理与经典DDS信号发生器设计方案

热门文章

  1. 【862. 和至少为 K 的最短子数组】
  2. Python环境配置教程(超详细图文版)
  3. IE 11 请求语言zh-Hans-CN所引发的问题及解决方案
  4. 一个无驱型USB加密锁的HID通信分析
  5. babun windows配置
  6. odoo系统架构介绍
  7. SpringBoot系列十八:整合Hikari
  8. 左右连接中where和and的区别
  9. 81、PON网络分光器基本常识汇总,弱电人要熟知!
  10. Django学习(三)——MVC架构