环形链表的约瑟夫问题

前言

大家好呀,我是Humble,今天要分享的内容是环形链表的约瑟夫问题

说到链表,约瑟夫问题(约瑟夫环)绝对是一个经典的算法题,下面就让我们一起看一下吧~

正文开始前,我们先看一个小小的故事,借此引出主题,如果能勾起大家学习的兴趣就太好啦~


据说历史上有过这样的故事:在罗马人占领乔塔帕特后,39个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式:

41个人排成⼀圈,由第1个人开始报数,每报数到第3人,该人就必须自杀,然后再由下一个人重新报数,直到所有人都自杀身亡为止


然而约瑟夫和他的朋友并不想遵从。约瑟夫要他的朋友先假装遵从,他将朋友与自己安排在
第16个与第31个位置,于是逃过了这场死亡游戏


好,看完这个故事,不知道你有什么感想?下面我们回归正题,来做一下有这段轶事衍生出的约瑟夫问题吧~


正文

环形链表的约瑟夫问题_牛客题霸_牛客网 (nowcoder.com)

题目描述:

编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开

下一个人继续从 1 开始报数。

n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?

对于这道题目,Humble的思路是:
1.根据n来创建不带头的单向循环链表

2.逢m删除当前节点

实现的代码如下:

//为了方便,我们另外封装了两个函数,
//一个用来申请新的节点,一个用来创建不带头单向循环链表~

typedef struct ListNode ListNode;//偷个懒,将struct ListNode重命名为ListNode,嘿嘿

ListNode* BuyNode(int x)
{
   ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));

   newNode->val = x;
   newNode ->next = NULL;
   
   return newNode;
}

ListNode* createlist(int n)
{
    ListNode* phead = BuyNode(1);
    ListNode* ptail = phead;
    for (int i =2;i<=n;i++)
    {
        ptail->next = BuyNode(i);
        ptail = ptail->next;
    }
     ptail->next = phead;//让链表构成环

     return ptail;//返回尾节点

}

int ysf(int n, int m )
 {
   ListNode* prev = createlist(n);//前驱,因为链表是循环的所以初始放在尾节点
   ListNode * head = prev->next;
   ListNode* pcur  = head;

   int count = 1;//计数;

   while (pcur->next != pcur)
   {
       if(count == m)
       {
        prev->next = pcur->next;
        free(pcur);
        pcur =  prev->next;
        count = 1;
       }
        
        else 
        {
          prev  = pcur;
          pcur = pcur->next;
          count++;
        }

   }

//循环结束后,此时的pcur节点就是幸存下来的唯一的节点了
return pcur->val; //输出幸存者的编号
  
}

运行结果如下:

结语

好了,今天关于约瑟夫环的分享就到这里了,如果对大家有帮助就太好啦~

在学习编程的道路上Humble与各位同行,加油吧各位!

最后希望大家点个免费的赞或者关注吧(感谢感谢),也欢迎大家订阅我的专栏

让我们在接下来的时间里一起成长,一起进步吧!

e0d3d2143b284925a6e6d82b6cd73662.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频监控平台EasyCVR增加fMP4流媒体视频格式及其应用场景介绍

近期我们在视频监控管理平台EasyCVR系统中新增了HTTP-FMP4播放协议&#xff0c;今天我们就来聊聊该协议的特点和应用。 fMP4&#xff08;Fragmented MPEG-4&#xff09;是基于MPEG-4 Part 12的流媒体格式&#xff0c;是流媒体的一项重要技术&#xff0c;因为它能通过互联网传送…

如何正确使用RC滤波网络

众所周知&#xff0c;最有效的滤波电路应靠近噪声源放置&#xff0c;滤波的作用是对噪声电流进行及时有效地阻止和转移&#xff0c;实际设计中&#xff0c;工程师经常使用高的串联阻抗&#xff08;电阻、电感和铁氧体&#xff09;阻止电流&#xff0c;并使用低的并联阻抗&#…

怎样使用崭新的硬盘

新买的一块硬盘&#xff0c;接到电脑上&#xff0c;打开机器&#xff0c;却找不到新的硬盘&#xff0c;怎么回事&#xff1f;新的硬盘是坏的么&#xff1f;怎样才能把新硬盘用起来&#xff1f; 可能有几种原因导致您的电脑无法识别新的硬盘。以下是一些建议的解决方法&#xff…

一个处理Range List的面试题解法

大纲 题目解法Rangeaddremove ToolsRangeListaddremove 代码 最近看到一个比较有意思的面试题。题目不算难&#xff0c;但是想把效率优化做好&#xff0c;也没那么容易。 我们先看下题目 题目 // Task: Implement a class named RangeList // A pair of integers define a ra…

解决 ssh: connect to host github.com port 22: Connection timed out

问题 今天使用git克隆github上的代码时&#xff0c;一直报错 原以为是公钥过期了&#xff0c;就尝试修改配置公钥&#xff0c;但是尝试了几次都不行&#xff0c;最终在博客上找到了解决方案&#xff0c;在次记录一下&#xff0c;以备不时之需 解决ssh-connect-to-host-github…

【实战教程】一文读懂防火墙本地Portal认证:让你的网络更安全!

往期精彩 【实战教程】防火墙设备登录配置&#xff0c;让你轻松掌握网络安全&#xff01;【实战教程】防火墙安全区域与策略实战指南&#xff1a;让你的网络安全防护如虎添翼&#xff01;【实战教程】防火墙常见NAT技术&#xff0c;让你一次看个够&#xff01;【实战教程】从零…

机器学习之聚类-2D数据类别划分

无监督学习&#xff08;Unsupervised Learning&#xff09; 机器学习的一种方法&#xff0c;没有给定事先标记过的训练示例&#xff0c;自动对输入的数据进行分类或分群。 方式一&#xff1a;站着或坐着 方式二&#xff1a;全身或半身 方式三&#xff1a;蓝眼球或不是蓝眼球 …

RocketMQ-Windows版本安装

RocketMQ-Windows版本安装 1.环境准备 JDK和maven需要先安装好&#xff0c;我这里使用的JDK1.8版本 Maven 3.8.6版本。需要注意的是&#xff0c;这里配置java时需要指定JAVA_HOME环境变量 RokectMQ才能正常启动。 2.下载RocketMQ 官网下载: https://rocketmq.apache.org/z…

苹果手机怎么还原?本文教你一键操作!

苹果手机作为一系列备受瞩目的智能设备&#xff0c;以其流畅的用户体验和出色的性能而备受用户喜爱。然而&#xff0c;在某些情况下&#xff0c;例如设备出现故障、需要清理空间、或者想要将手机还原至出厂设置&#xff0c;用户可能会考虑进行苹果手机的还原。在本文中&#xf…

OpenCV书签 #余弦相似度的原理与相似图片/相似文件搜索实验

1. 介绍 余弦相似度&#xff08;Cosine Similarity&#xff09;&#xff0c;又称为余弦相似性&#xff0c;是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度仅仅与向量的指向方向相关&#xff0c;与向量的长度无关&#xff0c;它将向量根据坐标值绘制到向量空间…

HelpLook支持同步企微组织架构,管理内部知识库更方便!

内部知识库是企业用来集中存储、管理和分享内部信息的系统。它类似一个知识仓库&#xff0c;员工可以在这里查找和获取所需的资料、流程和策略。同时保护公司的核心知识不会因员工的流动而流失&#xff0c;也能推动公司的创新和决策的精准性&#xff0c;对于公司的日常运营和长…

Leetcode—2788. 按分隔符拆分字符串【简单】(stringstream的应用)

2023每日刷题&#xff08;八十六&#xff09; Leetcode—2788. 按分隔符拆分字符串 实现代码 class Solution { public:vector<string> splitWordsBySeparator(vector<string>& words, char separator) {vector<string> res;for(auto word: words) {st…

性能优化-HVX架构简介

来自 「发表于知乎专栏《移动端算法优化》」 本文主要介绍Hexagon DSP的HVX技术&#xff0c;旨在通过简单的语言讲清HVX技术。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开…

【MySQL索引特性】

文章目录 1. 没有索引&#xff0c;可能会有什么问题2. 认识磁盘2.1 MySQL与存储2.2 先来研究一下磁盘&#xff1a;2.3 磁盘随机访问(Random Access)与连续访问(Sequential Access) 3. MySQL 与磁盘交互基本单位4. 建立共识5. 索引的理解5.1 建立测试表5.2 插入多条记录5.3 查看…

宝马X5原车氙气灯升级采用搭载FP7208升压LED驱动模块的双光透镜,效果立竿见影

目录 一、LED车灯的内部组成结构 二、FP7208驱动板详解 三、FP7208的优势 1.模拟和数字调光、无频闪 2.拥有多种功能&#xff0c;有效提高LED灯珠寿命 结论&#xff1a; 在夜晚的道路上&#xff0c;车灯的亮度对于驾驶安全至关重要。然而&#xff0c;许多车主常常对汽车灯…

网络组件、设备和关系网络图【推荐】

目录 网络上的设备&#xff1a; 设备和台式计算机&#xff1a; 防火墙&#xff1a; 服务器&#xff1a; 集线器和交换机&#xff1a; 路由器&#xff1a; 调制解调器和无线接入点调制解调器&#xff1a; 无线接入点&#xff1a; 网络架构&#xff08;有时称为网络设计&…

【思路合集】talking head generation+stable diffusion

1 以DiffusionVideoEditing为baseline&#xff1a; 改进方向 针对于自回归训练方式可能导致的漂移问题&#xff1a; 训练时&#xff0c;在前一帧上引入小量的面部扭曲&#xff0c;模拟在生成过程中自然发生的扭曲。促使模型查看身份帧以进行修正。在像VoxCeleb或LRS这样的具…

学会使用ubuntu——ubuntu22.04使用WebCatlog

Ubuntu22.04使用WebCatlog WebCatlog是适用于Gnu / Linux&#xff0c;Windows或Mac OS X系统的桌面程序。 引擎基于铬&#xff0c;它用于在我们的桌面上处理Web服务。简单点就是把网页单独一个窗口出来显示&#xff0c;当一个app用。本文就是利用WebCatlog安装后的notion编写的…

知识图谱符号表示比较:特性图、RDF和OWL

目录 前言1 特性图&#xff1a;灵活的图结构表示1.1 优势与灵活性1.2 存储优化与查询优势1.3 挑战&#xff1a;缺乏工业标准支持 2 RDF&#xff08;Resource Description Framework&#xff09;&#xff1a;面向Web的数据标准2.1 三元组结构的优势2.2 语义标准与词汇丰富性2.3 …

为你推荐十款顶级CAD制图软件,助力绘图工作更轻松!

市场上有各种各样的CAD绘图软件。国外和国内的相关软件都比较成熟&#xff0c;但目前CAD三维绘图还略有欠缺。这里推荐的10款非常好用的CAD绘图软件&#xff0c;包括支持2D和3D的&#xff0c;大部分都是免费的CAD绘图工具&#xff0c;还有一些功能完善的收费软件。点击下面的软…