`

程序员面试题精选100题(14)-圆圈中最后剩下的数字

阅读更多
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。

思路:最初有0,1,2,3...m-1,m,m+1,m+2...n-1这么多个数,
第一次以后变成了0,1,2,3...m-1 ,m+1,m+2...n-1

第一个被删除的数字为m%n - 1 记为k (数组的位置需要-1)

而这个时候数组的起始位置发生了变化
k+1----0
k+2----1
...
n-1 --- n-k-2
0  ----  n-k-1
....
x----x-k-1
...
k-1 ---- n-2

所以这个映射为p(x)=(x-k-1)%n;----%n可以体现循环思想
p-1(x)=(x+k+1)%n;----逆运算

设f(n,m)可以计算出最终的结果
f'(n-1,m)为第一次删除后的序列,因为序列和以前不同,但是规则相同
f'(n-1,m)计算的结果经过映射后也可以得到和f(n,m)相同的结果
所以f'(n-1,m)=p-1(f(n-1,m))=[f(n-1,m)+k+1]%n  再把k=m%n-1代入
=[f(n-1,m)+m%n-1+1]%n=[f(n-1,m)+m]%n


当n=1时,也就是序列中开始只有一个数字0,那么很显然最后剩下的数字就是0。我们把这种关系表示为:

         0                  n=1
f(n,m)={
         [f(n-1,m)+m]%n     n>1

//其实非递归的方式容易理解些,实质上就是把余下的n-1个数字入栈,然后再做同样的事情





分享到:
评论

相关推荐

    程序员面试题精选100题

    程序员面试题精选100题 本资源是程序员面试题精选100题,涵盖了算法、数据结构、操作系统、计算机网络、数据库等多个领域。今天,我们将深入分析其中的一道题目,即将二元查找树转换成排序的双向链表。 知识点一:...

    程序员面试题精选100题.doc

    对于程序员面试,理解并能熟练应用这类问题的解决方案,展示了解数据结构和算法的能力,是评估应聘者编程技能的重要标准。同时,能清晰解释和分析递归过程,也是考察逻辑思维和问题解决能力的关键。

    程序员面试题精选100题(经典!)

    具体来说,文档中详细讨论了一个在程序员面试中常见的算法问题:如何将二元查找树(Binary Search Tree,BST)转换为一个排序的双向链表。这是一个涉及树的遍历、指针操作、递归思维的经典算法问题。下面将详细介绍...

    java程序员早期面试题汇总.zip

    ------------------------------------- java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全)....程序员面试题精选100题.pdf ... -------------------------------------

    程序员面试题精选100题.rar

    程序员面试题精选100题.rar

    程序员面试题精选100题.docx

    程序员面试题精选100题 本文档概述了程序员面试题精选100题,涵盖了C++面试题和笔试题,其中有一道典型的题目是将二元查找树转换成排序的双向链表。 知识点一:二元查找树(Binary Search Tree) * 二元查找树是...

    程序员面试题精选100题完整版

    在软件开发行业中,数据结构与算法是程序员必须掌握的基础技能之一,尤其是在求职过程中,这部分知识更是考察的重点。其中,二叉查找树(Binary Search Tree, BST)作为一种重要的数据结构,因其高效的查找特性而在...

    程序员面试题精选 C++ 算法 微软 google

    程序员面试题精选 C++ 算法 微软 google 程序员面试题精选 C++ 算法 微软 google

    程序员面试题精选100题(更新至60)

    例如,本文提到的《程序员面试题精选100题》就旨在为即将进入职场的程序员提供一系列经典的技术面试题目,帮助他们系统地复习相关知识和技术要点,从而提升面试表现。 #### 4. 具体案例分析:将二叉查找树转化为...

    java程序员面试题150例-java常见面试题-java工程师面试题-java面试题大全

    java程序员面试题150例 java常见面试题 java工程师面试题 java面试题大全 带搜索功能,能非常方便的查找到你想要了解的 java面试题目 推荐大家下载。

    程序员面试题精选100题.pdf

    在程序员的面试过程中,面试题往往涵盖了许多技术领域,包括数据结构、算法、操作系统、网络、数据库等。这里我们重点讨论的是如何将一个二元查找树(Binary Search Tree, BST)转换成一个排序的双向链表,这是一个...

    程序员面试题精选100题(自己整理)

    【知识点详解】 1. **二元查找树(Binary Search ... 这类问题通常出现在程序员的面试中,因为它测试了对数据结构的理解、递归思维以及解决问题的能力。理解和掌握这个问题的解法对于提升编程技巧和面试表现至关重要。

Global site tag (gtag.js) - Google Analytics