本篇文章给大家谈谈.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。
整数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。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/97849.html
用户评论
怀念·最初
这个.NET面试题汇总太棒了!终于有个地方收录了好多常用的问题,感觉这次面试没那么慌张了。
有17位网友表示赞同!
虚伪了的真心
之前看到过第一部分的总结,这第二部分又更新了这么多内容,大佬真是太强啦。我正在准备面试,真的帮到我了!
有13位网友表示赞同!
陌上花
我从码农变成架构师路上的点点滴滴,感觉.NET框架和一些高级概念真难记,希望能多看看这类题汇总巩固下知识点。
有17位网友表示赞同!
巷雨优美回忆
这个集合了各个领域的经典面试题,对于想进微软公司的同学来说真是太宝贵了!
有18位网友表示赞同!
醉枫染墨
总的来说整理得不错,至少针对.NET常见的面试问题比较全面。不过希望能有更多实际案例分析,这样能更深入地理解这些概念。
有20位网友表示赞同!
_心抽搐到严重畸形っ°
.NET面试题确实很难啊,要记得很多接口、原理和代码示例。收藏这份汇总备用,希望自己能顺利通过面试!
有12位网友表示赞同!
凉月流沐@
除了理论知识之外,一些关于性能优化的考察点也需要注意啊!这个总结缺少这一块内容,不然更完美了。
有14位网友表示赞同!
无所谓
感觉有些题过于基础,对有一定经验的程序员来说没太大意义。希望能针对更高级的架构设计或系统优化方向提供更多题目参考。
有12位网友表示赞同!
落花忆梦
哈哈,这第一道题差点让我怀疑自己是不是菜鸡呀!
有8位网友表示赞同!
抓不住i
这些问题确实很难全部答出来,面试官估计就是想测试你的思考方式和解决问题的能力吧!
有10位网友表示赞同!
寒山远黛
我准备.NET面试时就遇到了一些类似的问题,现在回头看看真是过目不忘啊!
有6位网友表示赞同!
白恍
对于学习.NET刚入门的小伙伴来说,这份总结还是很有帮助的。可以用来巩固基础知识,为未来的面试做好准备。
有10位网友表示赞同!
来自火星球的我
这个.NET面试题汇总分享得太好了,刚好我最近在面试中遇到了一些这类问题,现在回顾了一下感觉收获满满!
有7位网友表示赞同!
娇眉恨
学习编程不容易,特别是想要成为一名优秀的.NET开发人员。这份总结给我带来了一定的启发,希望自己能不断学习进步!
有9位网友表示赞同!
栀蓝
总的来说,这第二部分汇总非常不错,希望能常更新,保持内容的新鲜度。
有14位网友表示赞同!
该用户已上天
面试确实是个考验智商和心理素质的过程啊! 这份总结虽然不能保证你一定能通过面试,但至少能在备考过程中让你更有信心。
有12位网友表示赞同!
终究会走-
希望以后再添加一些新框架或技术的题目,比如ASP.NET Core等。
有17位网友表示赞同!
炙年
这汇总真的太全面了!我准备面试时可以参考一下
有19位网友表示赞同!