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

前段时间在知乎上看到貌似很火的小米面试题,也看到了微软大神给的思路,但是可能是能力不够发现看不懂于是乎自己试着写了写

先说一下思路

  1. 既然每次都是先取一张放到桌子上,然后再一张放到牌堆底。也就是编号为奇数的放到桌子上,编号为偶数的放到牌堆底。
  2. 通过判断放到牌堆底的个数为奇数的话证明n为偶数,再一次的话就应该直接放到桌子上;为偶数的数证明n为奇数,再一次的话应该先放到牌堆底然后再放到桌子上。

开始写代码

/*** @param intList*            原来的手牌 1~n的排序* @param intTampList*            放到最后的牌* @param list*            放到桌子上的牌* @param isfirst*            判断是不是第一次 原因是第一次不需要考虑第一张是不是放到桌子上还是放到最后面** @author 庾雍*/public static List aaa(List intList, List intTampList, List list,boolean isfirst) {if (isfirst) {for (int i = 1; i <= intList.size(); i++) {if (i % 2 != 0)list.add(intList.get(i - 1));elseintTampList.add(intList.get(i - 1));}} else {// 需要考虑inttamplist的个数为奇数还是偶数
//奇数则证明n的个数为偶数不需要先放到inttamplist中反之则应该先放进去if (intList.size() % 2 != 0) {for (int i = 1; i <= intList.size(); i++) {if (i % 2 != 0)list.add(intList.get(i - 1));elseintTampList.add(intList.get(i - 1));}} else {// 先放到intTampList中intTampList.add(intList.get(0));for (int i = 2; i <= intList.size(); i++) {if (i % 2 == 0)list.add(intList.get(i - 1));elseintTampList.add(intList.get(i - 1));}}}if (intTampList.size() > 0) {aaa(intTampList, new ArrayList(), list, false);}return list;}public static void main(String[] args) {List list = new ArrayList();List intList = new ArrayList();intList.add(1);intList.add(2);intList.add(3);intList.add(4);intList.add(5);intList.add(6);intList.add(7);intList.add(8);intList.add(9);List aaa = aaa(intList, new ArrayList(), list, true);System.out.println(aaa);}

输出的结果为:

大体就是这样,如果有大神提出更简单的算法请给小弟留言

小米面试题:一副从1到n的牌相关推荐

  1. 小米面试题:手机分身,电话号码隐藏。

    小米面试题: 手机分身,电话号码隐藏. 0-9分别对应ZERO,ONE,TWO,...,NINE 为保证手机拨号安全性,拨号后,存为对应的字符串,并打乱顺序,保证安全性. 现在给定一个字符串,求最小的 ...

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

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

  3. 大数据学长面试-------小米面试题

    小米面试题 学长1 大家可以投一下小米的推荐算法. 一面:问两个有序大数组合并成一个数组的最佳方法,还有快排,问了所有项目. 二面:是问推荐算法的业务实现,还有如果你自己做一个推荐,你会怎么选择模型. ...

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

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

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

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

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

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

  7. 小米面试题 嵌入式_说说最近一次失败的小米嵌入式面试经历

    姑且把第一次面试叫一面,第二次面试叫二面吧. 第一次面试(周五) 面试官 1:一份比较基础的面试笔试题,然后比较笼统的问了问简历上的项目细节,部分细节追问.面试官年龄相仿,很随和.答笔试题的时候说,不 ...

  8. C语言:面试题-一副牌从A到K共13张,取牌的顺序是这样的:A、将第一张放到最下面。B、取出最上面的一张牌。。。。

    代码如下: /************************************************************************** *功能:求解下面问题 *一副牌从A到 ...

  9. 转载的一道小米面试题和自己的写法

    转载 的一道小米的面试题 写一个函数stringconcat, 要求能 var result1 = stringconcat("a", "b") result1 ...

最新文章

  1. Linux学习(四)---用户管理
  2. Mac 下anaconda安装mysqldb的方法
  3. 2.4带通采样的实际问题
  4. c语言复制粘贴源码,c语言函数memccpy()如何复制内存中的内容实例源码介绍
  5. 理解Node.js(译文)
  6. jzoj3054-祖孙询问【LCA】
  7. mysql cluster 外键_Mysql外键约束
  8. Informix IDS 11体系操持(918测验)认证指南,第 4 部门: 机能调优(1)
  9. php 中抽象类的作用,解释PHP中的抽象类。
  10. ITextSharp 使用
  11. 文本挖掘带你分析 “苏轼” 的一生!(附视频)
  12. 得到头条【四线城市宜宾,靠什么逆袭?】
  13. paip 破解网站手机验证码
  14. 装箱与拆箱(TDB)
  15. 随笔随想-2022-06-07
  16. 什么是单工通信、半双工通信、全双工通信?3种通信方式的区别是什么?
  17. 基于RC电路的DA14585测量NTC电阻阻值
  18. 递归中的引用传递和常引用传递
  19. JVM的Metaspace,JAVA8以前是Permanent Area
  20. 云计算的模型都有哪些

热门文章

  1. 被985博导称赞的保研考研复试导师推荐信长什么样子?
  2. 基于WIndow的MailServer和Foxmail搭建本地邮件服务器及实现本地邮箱账号收发邮件
  3. 论文笔记:nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation
  4. 2022年标准员-通用基础(标准员)考试题及在线模拟考试
  5. python开发工具总结
  6. 计算个人所得税的java代码
  7. IC设计——EDA软件篇——xcelium
  8. 交易猫不显示服务器,交易猫上号器一直显示检查游戏环境
  9. camunda 驳回 二 并行
  10. Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat