【刷题】牛客网 NC132 环形链表的约瑟夫问题

在这里插入图片描述

NC132 环形链表的约瑟夫问题

  • 题目描述
  • 思路一(链表直通版)
  • 思路二(数组巧解版)
  • 思路三(变态秒杀版)
  • Thanks♪(・ω・)ノ谢谢阅读
  • 下一篇文章见!!!

题目描述

在这里插入图片描述
根据描述,该题思路类似于报数,第一想法就是构建环形链表。

思路一(链表直通版)

  1. 构建环形链表,赋予对应序号
  2. 进行约瑟夫问题
  3. 报到对应数,删除节点
  4. 一直到只剩一个节点。
typedef struct listnode{int val ;struct listnode* next;
} Listnode;Listnode* buynode(int n ){//开辟空间Listnode* node = (Listnode*)malloc(sizeof(Listnode));//序号赋值node->val = n;//next 指针赋值node->next = NULL;//返回节点return node;
}Listnode* createlist(int n){//序号int i = 1;//创建头尾Listnode* phead ,*ptail;//先创建第一个节点phead = ptail = buynode(i++);//循环构建链表while(i<=n){ptail->next = buynode(i++);ptail = ptail->next;}//将头尾相连,构成循环链表ptail->next = phead;//返回头节点return phead;}
int ysf(int n, int m ) {// 创建环形链表Listnode * head = createlist(n);//约瑟夫问题//计数int count = 1 ;//定义 前指针 当前指针Listnode* cur ,*prev;cur = head;prev = NULL;while(cur->next != cur){//报到指定数 删除节点if(count == m){//前节点 的next指向 当前节点的下一个节点即可删除prev->next = cur->next;cur = cur->next;//报数重置count = 1;}else{//没有报到指定数 则向后移动。prev = cur;cur = cur->next;count++;}}//返回序号return cur->val;
}

来看运行效果:
在这里插入图片描述
运行很顺利

思路二(数组巧解版)

链表的实现虽然简洁,但是遇到较大数据时难免会开辟较大内存空间,所以我们可以使用数组模拟循环链表的过程。

  1. 创建数组,并赋予对应序号值
  2. 开始遍历计数,报到m 将数组前移覆盖删除即可
  3. 一直反复进行到只剩一个元素。
#define max_num 100001
int ysf(int n, int m ) {//初始化数组int man[100001];for(int i = 0;i<n;i++){man[i] = i + 1;}//计数int count = 1;//控制下标int i =0;while(n > 1 ){//如果报到对应数if(count == m){//向前覆盖删除元素for(int j = i;j < n-1;j++){man[j] = man[j + 1];}//计数重置count = 1;//人数减 1n--;//注意不需要将 i++ 因为删除过程 i 已经指向了后一个元素。}else{//不是对应数 i++ 计数加1i++;count++;}//保证不超出 n 范围i %= n;}//返回对应序号return man[i];
}

思路三(变态秒杀版)

该思路使用数学公式,进行快速计算
F(N,M)=(F(N-1,M)+M)%N
即我们可以通过目前幸存者逆推其一开始的序号。
而根据刚才的数组思路,可以知道最后的幸存者数组下标是0,所以我们便可以开始逆推。

int ysf(int n, int m ) {//F(N,M)=(F(N-1,M)+M)%N//最后幸存者下标为 0int p = 0;//从人数为2开始逆推,直到人数为nfor (int i = 2; i <= n; i++) {//依次移动p = (p + m) % i;}//记得将序号加一return p + 1;}

Thanks♪(・ω・)ノ谢谢阅读

下一篇文章见!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 的闪回技术是什么

什么是闪回 Oracle 数据库闪回技术是一组独特而丰富的数据恢复解决方案&#xff0c;能够有选择性地高效撤销一个错误的影响&#xff0c;从人为错误中恢复。闪回是一种数据恢复技术&#xff0c;它使得数据库可以回到过去的某个状态&#xff0c;可以满足用户的逻辑错误的快速恢复…

SpringCloudAlibaba组件总结笔记(如Nacos、SpringCloudGateway、OpenFeign,Ribbon,RabbitMQ)

这目录 1.Ribbon负载均衡1负载均衡原理2.负载均衡策略1.负载均衡策略2.自定义负载均衡策略 3.饥饿加载 2.Nacos注册中心与Eureka的区别3.Nacos配置中心1.从微服务拉取配置2.配置热更新1.2.1.方式一1.2.2.方式二 3.配置共享1.配置共享的优先级 4.Feign1.Feign使用优化2.配置连接…

使用Promethues+Grafana监控Elasticsearch

PromethuesGrafana监控Elasticsearch 监控选用说明指标上报流程说明实现监控的步骤搭建elasticsearch-exporter服务搭建promethues和grafana服务 监控选用说明 虽然用Kibana来监控ES&#xff0c;能展示一些关键指标&#xff0c;但ES本身收集的指标并不全面&#xff0c;还需要在…

torchvision.models._utils.IntermediateLayerGetter()使用

torchvision.models._utils.IntermediateLayerGetter&#xff08;&#xff09;使用 源码如下&#xff1a; from collections import OrderedDictimport torch from torch import nnclass IntermediateLayerGetter(nn.ModuleDict):"""Module wrapper that ret…

Python采集学习笔记-读取excel数据

表格格式 方法一:使用xlrd import xlrd 1.读取Excel文件 workbook xlrd.open_workbook(plc.xlsx) 2.读取第一个表 sheet workbook.sheet_by_index(0) 3.获取表格总行数 total_rows sheet.nrows 4.创建列表,存储表格一行中每一列信息 plc_info [] for row in range(1…

【JAVA】Long类型返回到前端,精度丢失

一. 问题阐述 20位long类型的数字&#xff0c;从后端接口返回到前端后【四舍五入】 MYSQL端 &#xff08;1&#xff09;bigint (20) &#xff08;2&#xff09;具体某一条数据 JAVA端 &#xff08;1&#xff09;实体类 &#xff08;2&#xff09;服务类 &#xff08;3&…

docker可视化操作

docker可视化操作&#xff0c;ui界面操作 1.检查docker服务状态 docker status2.安装服务 部署 Portainer 1.从镜像仓库中拉取 Portainer&#xff1a;docker pull portainer/portainer2.创建数据卷&#xff1a; docker volume create portainer_db 3.启动 Portainer命令&…

86.网游逆向分析与插件开发-物品使用-物品丢弃的逆向分析与C++代码的封装

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;物品使用的逆向分析与C代码的封装-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;7563f86877c…

NFTScan 与 Merlin Protocol 共同推出 BRC20 Indexer Oracle,于今日正式上线!

近日&#xff0c;NFT 数据基础设施 NFTScan 与 Merlin Protocol 进行战略合作&#xff0c;联合推出了比特币网络原生资产 Indexer Oracle 服务&#xff0c;现在该服务已在 NFTScan 开发者平台上线&#xff0c;任何开发者都可以注册使用&#xff01; Merlin Protocol 是一个专用…

linux 磁盘标签类型MBR转换为GPT

[rootlocalhost /]# fdisk -l 磁盘 /dev/sda&#xff1a;299.4 GB, 299439751168 字节&#xff0c;584843264 个扇区 Units 扇区 of 1 * 512 512 bytes 扇区大小(逻辑/物理)&#xff1a;512 字节 / 512 字节 I/O 大小(最小/最佳)&#xff1a;512 字节 / 512 字节 磁盘标签类…

解读 HTTP 和 HTTPS:有何异同?

超文本传输安全协议&#xff08;HTTPS&#xff09;是建立在超文本传输协议&#xff08;HTTP&#xff09;之上的一种安全网络传输协议。在计算机网络上传输时&#xff0c;HTTPS 通过传输层安全性&#xff08;TLS&#xff09;或它的前身安全套接字层&#xff08;SSL&#xff09;为…

谷歌上架防关联VPS开到和原来一样的IP造成关联?应该怎么选?

随着Google paly的发展&#xff0c;竞争越来越激烈&#xff0c;开发者们也面临的越来越多的挑战。其中&#xff0c;如何降低关联风险是开发者们重点关注的问题。 为了防止开发者账号的滥用或欺诈&#xff0c;谷歌会通过判断账号之间是否存在关联&#xff0c;并对违规账号进行处…

【Vue】二、Vue 组件展示控制的优雅解决方案

vue项目中展示的组件&#xff0c;我平常都是通过v-show进行展示控制&#xff0c;类似这样 通常情况下&#xff0c;一个正常展示组件的流程&#xff0c;是通过前端用户点击触发函数&#xff0c;在函数中对data数据进行操作&#xff0c;从而展示不同的页面 showWork: false, sho…

首次接触共享办公室,有哪些问题需要注意?

随着互联网和创业的发展&#xff0c;越来越多的企业和个人选择共享办公空间作为他们的办公场所。共享办公空间是一种提供灵活的办公模式和配套的设施和服务的空间&#xff0c;可以帮助企业和个人节省成本和空间&#xff0c;提高效率和创新&#xff0c;拓展人脉和资源。但是&…

【C++】STL之空间配置器(了解)

一、什么是空间配置器 空间配置器 &#xff0c;顾名思义就是为各个容器高效的管理空间&#xff08;空间的申请与回收&#xff09;的&#xff0c;在默默地工作。虽然在常规使用 STL 时&#xff0c;可能用不到它&#xff0c;但站在学习研究的角度&#xff0c;学习它的实现原理对…

注册亚马逊店铺用动态IP可以吗?

注册亚马逊店铺可以用动态IP&#xff0c;只要是独立且干净的网线就没问题&#xff0c;亚马逊规则要求一个IP地址只能出现一个亚马逊店铺&#xff0c;若使用不当会导致关联账户。 固定ip可以给我们的账户带来更多的安全&#xff0c;要知道关联问题是亚马逊上的一个大问题&#…

PHP/原生类/Java/Python反序列化总结

PHP反序列化 #方法&属性-调用详解&变量数据详解 对象变量属性&#xff1a; public(公共的):在本类内部、外部类、子类都可以访问 protect(受保护的):只有本类或子类或父类中可以访问 private(私人的):只有本类内部可以使用 序列化数据显示&#xff1a; private 属性序…

python爬虫之豆瓣首页图片爬取

网址&#xff1a;https://movie.douban.com/ import requests from lxml import etree import re url https://movie.douban.com headers {User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/5…

如何快速知道app当前页面是哪一个Activity(2.0升级版)

点我跳转 如何快速知道app当前页面是哪一个Activity 1.0版本 这个版本是用adb 命令实现的&#xff0c;想看的可以看看&#xff0c;学习一下adb 命令。 今天做了一个非常简易的app来直接监控当前页面Activity&#xff0c;效果直接炸裂&#xff0c;效果图如下&#xff1a; 有需要…

详解SpringCloud微服务技术栈:深入ElasticSearch(2)——自动补全、拼音搜索

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;深入ElasticSearch&#xff08;1&#xff09;——数据聚合 &#x1f4da;订阅专栏&…