
获得徽章 9
赞了这篇文章
#挑战每日一条沸点# 【笔记】约瑟夫环问题
之前就记了双链表的解法。不会数组如何解,记一记数组的
题目有n为总人数,m为数到m出局的人数。
数组解法:
1、创建一个长度为n的arr数组
2、初始化数组可以将每个人的值设置为1,表示在圈内。
3、定义两个变量count和index,分别用于记录报数次数和当前指向的人的索引。
4、使用循环进行报数和淘汰操作,直到只剩下一个人。
如果当前人(就是当前指向的人)在圈内(arr[index] == 1),则进行如下操作:
count加1,表示报数一次。
如果报数次数等于k(count == k),则淘汰当前人:将当前人的值设为0,表示已淘汰。
圈内人数n减1,重置报数次数,令count为0。
指向下一个人,如果到达数组末尾,回到数组开头。
5、找到最后剩下的人的索引,遍历数组arr[]:
如果找到值为1的元素,返回其索引加1作为最后幸存者的编号。
之前就记了双链表的解法。不会数组如何解,记一记数组的
题目有n为总人数,m为数到m出局的人数。
数组解法:
1、创建一个长度为n的arr数组
2、初始化数组可以将每个人的值设置为1,表示在圈内。
3、定义两个变量count和index,分别用于记录报数次数和当前指向的人的索引。
4、使用循环进行报数和淘汰操作,直到只剩下一个人。
如果当前人(就是当前指向的人)在圈内(arr[index] == 1),则进行如下操作:
count加1,表示报数一次。
如果报数次数等于k(count == k),则淘汰当前人:将当前人的值设为0,表示已淘汰。
圈内人数n减1,重置报数次数,令count为0。
指向下一个人,如果到达数组末尾,回到数组开头。
5、找到最后剩下的人的索引,遍历数组arr[]:
如果找到值为1的元素,返回其索引加1作为最后幸存者的编号。
展开
评论
点赞
赞了这篇文章