.NET面试题汇总(二)

猴子选大王问题是一个十分经典的算法问题,这个问题是这样的:一堆猴子都有编号,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,

本篇文章给大家谈谈.NET面试题汇总(二),以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

这个问题解决起来并不难,但是解决的方法有很多;该问题还有很多变体,我们将这类问题统称为约瑟夫问题。这类问题的基本描述是:N个人围成一圈,从第一个开始数,第M个人会被杀死,最后一个人,剩下的都会被杀死。比如N=6,M=5,被杀死的顺序是:5,4,6,2,3,1。我们先分析一下解决此类问题的几个步骤。

(1)由于每个人只有死亡和活着两种状态,因此可以用布朗数组来标记每个人的状态。真则表示死,假则表示活。

(2)一开始大家都是活着的,所以数组的初始值全部赋值为false。

(3)模拟杀戮过程,直到所有人都被杀掉。

题目中,N个人围成一个圆圈,这启发我们用一条循环链来表示。我们可以使用数组结构来形成循环链表。该结构体中有两个成员,一个是指向下一个人的指针,形成循环链;另一个是这个人是否被杀的标志,1表示他还活着。从第一个人开始统计幸存的人数,每次计数到M时,将结构体中的标记改为0,表示该人已被杀死。此循环计数直至15 人死亡。

不过,无论是用链表还是数组实现,它们都有一个共同点:要模拟整个游戏过程,不仅写程序繁琐,而且时间复杂度高达O(nm) 。当n和m很大时(比如几百、几万、几千万),短时间内几乎不可能得到结果。我们注意到,最初的问题只需要最终获胜者的序列号,而不是要求读者模拟整个过程。因此,如果你想提高效率,就打破规则并实施一些数学策略。

为了讨论方便,在不影响原意的情况下,稍微改变一下问题:

问题描述:n个人(编号为0~(n-1))从0开始数,报到(m-1)后退出,剩下的人继续从0开始数,找出获胜者的号码。

核心代码:

公共int King(int M, int N)

{

//算到第N个排除者,总人数为M。

.NET面试题汇总(二)

整数k=0;

for (int i=2; i=M; i++)

k=(k + N) % i;

返回++k;

}

分析:

n(0,1,2,3,n-1)只猴子中,假设删除报告编号m的猴子,

那么第一只被删除的猴子的数量为(m-1)%n,记为k,那么删除k后剩下的n-1只猴子分别是0, 1, k-1, k+1,n-1,下次从k+1开始计数。

相当于剩余序列中k+1位于最前面,从而形成k+1,n-1,0,1,k-1。

接下来,将剩余的n-1个数字k+1,n-1,0,1,k-1的序列映射,形成从0到n-2,0,1,2的序列,n-2。

定义映射为p,则p(x)=(x-k-1)%n。

反过来,将0, 1, 2, n-2 映射到k+1, n-1, 0, 1, k-1,则p'(x)=(x+k +1)%n,且k=(m-1)%n,所以p'(x)=(x+m)%n。

用户评论

.NET面试题汇总(二)
怀念·最初

这个.NET面试题汇总太棒了!终于有个地方收录了好多常用的问题,感觉这次面试没那么慌张了。

    有17位网友表示赞同!

.NET面试题汇总(二)
虚伪了的真心

之前看到过第一部分的总结,这第二部分又更新了这么多内容,大佬真是太强啦。我正在准备面试,真的帮到我了!

    有13位网友表示赞同!

.NET面试题汇总(二)
陌上花

我从码农变成架构师路上的点点滴滴,感觉.NET框架和一些高级概念真难记,希望能多看看这类题汇总巩固下知识点。

    有17位网友表示赞同!

.NET面试题汇总(二)
巷雨优美回忆

这个集合了各个领域的经典面试题,对于想进微软公司的同学来说真是太宝贵了!

    有18位网友表示赞同!

.NET面试题汇总(二)
醉枫染墨

总的来说整理得不错,至少针对.NET常见的面试问题比较全面。不过希望能有更多实际案例分析,这样能更深入地理解这些概念。

    有20位网友表示赞同!

.NET面试题汇总(二)
_心抽搐到严重畸形っ°

.NET面试题确实很难啊,要记得很多接口、原理和代码示例。收藏这份汇总备用,希望自己能顺利通过面试!

    有12位网友表示赞同!

.NET面试题汇总(二)
凉月流沐@

除了理论知识之外,一些关于性能优化的考察点也需要注意啊!这个总结缺少这一块内容,不然更完美了。

    有14位网友表示赞同!

.NET面试题汇总(二)
无所谓

感觉有些题过于基础,对有一定经验的程序员来说没太大意义。希望能针对更高级的架构设计或系统优化方向提供更多题目参考。

    有12位网友表示赞同!

.NET面试题汇总(二)
落花忆梦

哈哈,这第一道题差点让我怀疑自己是不是菜鸡呀!

    有8位网友表示赞同!

.NET面试题汇总(二)
抓不住i

这些问题确实很难全部答出来,面试官估计就是想测试你的思考方式和解决问题的能力吧!

    有10位网友表示赞同!

.NET面试题汇总(二)
寒山远黛

我准备.NET面试时就遇到了一些类似的问题,现在回头看看真是过目不忘啊!

    有6位网友表示赞同!

.NET面试题汇总(二)
白恍

对于学习.NET刚入门的小伙伴来说,这份总结还是很有帮助的。可以用来巩固基础知识,为未来的面试做好准备。

    有10位网友表示赞同!

.NET面试题汇总(二)
来自火星球的我

这个.NET面试题汇总分享得太好了,刚好我最近在面试中遇到了一些这类问题,现在回顾了一下感觉收获满满!

    有7位网友表示赞同!

.NET面试题汇总(二)
娇眉恨

学习编程不容易,特别是想要成为一名优秀的.NET开发人员。这份总结给我带来了一定的启发,希望自己能不断学习进步!

    有9位网友表示赞同!

.NET面试题汇总(二)
栀蓝

总的来说,这第二部分汇总非常不错,希望能常更新,保持内容的新鲜度。

    有14位网友表示赞同!

.NET面试题汇总(二)
该用户已上天

面试确实是个考验智商和心理素质的过程啊! 这份总结虽然不能保证你一定能通过面试,但至少能在备考过程中让你更有信心。

    有12位网友表示赞同!

.NET面试题汇总(二)
终究会走-

希望以后再添加一些新框架或技术的题目,比如ASP.NET Core等。

    有17位网友表示赞同!

.NET面试题汇总(二)
炙年

这汇总真的太全面了!我准备面试时可以参考一下

    有19位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/97849.html

(0)
小su的头像小su
上一篇 2024年8月29日 下午7:50
下一篇 2024年8月29日 下午8:02

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注