一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手里没有牌.最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组
研究一下这个面试题特此记录,题目:一副从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,输出牌堆的顺序数组相关推荐
- 扑克牌面试问题:从牌顶拿出一张牌放到桌子上,再从牌顶拿一张牌放在手上牌的底部,重复第一步、第二步的操作
前几天一同事去xx头条面试前端开发,遇到了一个面试问题,当时面试官是希望他通过当场思考以后说出答案,并说出解答的思路,问题是这样的: 我手中有一堆扑克牌, 但是观众不知道它的顺序. 1.第一步, 我从 ...
- 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组
题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手上没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组.(题目来源于一篇知乎上的文章) 思路: 在原牌堆 ...
- 面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌。根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组。
面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌.根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组. import java.util.LinkedList; i ...
- 面试题:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组
面试题:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组 思路如下:由题意可知存在两种操作,1.摸牌:2 ...
- 【Java】 实现一副扑克牌,包含:洗牌+发牌(3个人,一人5张)+输出牌的信息 的逻辑
import java.util.ArrayList; import java.util.List; import java.util.Random;class Card{private int ra ...
- 小明左、右手中分别拿两张纸牌(比如:黑桃10和红桃8,数字10和8可通过键盘录入),要求编写代码交换小明手中的牌
package zuoye;import java.util.Scanner;public class Test7 {public static void main(String[] args) {/ ...
- ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7
这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...
- 利用Python在Jetson TX2上抓取和显示摄像头影像
小编来自水下机器人社区193369905,里面小编给出了很多资料 在本贴中,小编"我"分享了如何使用python 代码(及 OpenCV)在Jetson TX2上抓取和显示摄像头影 ...
- idea从git上拉取并管理项目
idea从git上拉取并管理项目 1:idea从git上拉取项目 (1)FILE --> New --> Project from Version Control --> Git ( ...
最新文章
- java package private,Java中的public,protected,package-private和private有什么区别?
- 第二弹:超全Python学习资源整理(进阶系列)
- 使用itextpdf操作pdf
- php基础不好,基础不好,问个php类调用的初级问题
- bootstrap带有下拉按钮的输入框_关于bootstrap--表单(下拉select、输入框input、文本域textare复选框checkbox和单选按钮radio)...
- 扫地机器人单扫和双扫_小米扫拖机器人体验:再见了,拖把君
- 一次MySQL线上慢查询分析及索引使用
- leetcode 746 python 动态规划
- 【金融工程实验】【matlab】使用candle函数画日均k线图
- Object类的用法(二)
- phpstudy配置SSL证书的步骤(Apache环境)以及一些注意事项
- matlab保留有效数字指数形式,Matlab中数值计算精度
- 何通过ArcCatalog本地发布地图服务
- windows操作系统下新建txt文件快捷键
- javaweb调用qq认证登录接口
- 关于浏览器提示“隐私设置错误/证书错误导航已阻止”之 网站证书过期解决方案
- 七夕活动主题html邮件,七夕节活动策划方案,七夕创意活动主题
- Ubuntu18.04安装RTL8125/RTL8168等网卡驱动程序
- toString方法重写
- DDS信号发生器原理与经典DDS信号发生器设计方案