[js 约瑟夫环] 逢3退数求余 附带C伪代码

2 篇文章 0 订阅

题目

有N个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,
问最后留下来的是第几号的那位

分析

遇到的一个好玩的题目,记录一下,C写的代码我还没有编译,大致思路是没错的。js我用的递归的方式,当然时间复杂度就比C的时间复杂度高多了。

代码

		const getPostion = array => {
            if (array.length === 1) return array[0] // 一个人
            if (array.length === 2) return array[1] // 两个人
            return getPostion(array.filter((item, index) => index % 3))
        }


        const testArray = ['小明', '小张', '小王', '小董', '小陈', '小孙', '小江', '小红', '小涛', '小张', '小王', '小董', '小陈', '小孙', '小江',
            '小红', '小涛', '小张', '小王', '小董', '小陈', '小孙', '小江', '小红', '小涛', '小张', '小王', '小董', '小陈', '小孙', '小江', '小红',
            '小涛', '小张', '小王', '小董', '小陈', '小孙', '小江', '小红', '小涛', '小张', '小王', '小董', '小陈', '小孙', '小江', '小红', '小涛'
        ]

        // 生成内容递增的数组
        const indexArray = Array.from(Array(testArray.length)).map((v, i) => i)

        const pos = getPostion(indexArray)

        console.log(`剩下的是第${pos+1}位:${testArray[pos]}`)

        // 注:
        // 用C语言 可用循环单链表达到效率最大化
        // 无需额外空间,一次while循环即可得结果
        // while (p->next) {
        //     s = p->next->next
        //     p->next->next = p->next->next->next
        //     free(s)
        //     p=p->next->next
        // }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值