牛客-环形链表的约瑟夫问题

news2024/11/24 7:33:44

目录

题目

描述

示例1

示例2

图解

代码(解析在注释中)


题目

描述

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

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

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

数据范围: 1≤�,�≤100001≤n,m≤10000

进阶:空间复杂度 �(1)O(1),时间复杂度 �(�)O(n)

示例1

输入:
5,2     
返回值:
3    
说明:
开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开
1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开
1,3,5,从5开始报数,5->1,1->2编号为1的人离开
3,5,从3开始报数,3->1,5->2编号为5的人离开
最后留下人的编号是3      

示例2

1,1
1

图解

代码(解析在注释中)

/**
 * 定义一个结构体 ListNode,用于表示链表节点
 */
typedef struct ListNode ListNode;

/**
 * 创建一个新的链表节点,并将其值初始化为给定整数 x。
 *
 * @param x 初始化节点值的整数
 * @return 新创建的 ListNode 类型指针
 */
ListNode* New_node(int x) {
    ListNode* node = (ListNode*)malloc(sizeof(ListNode)); // 分配内存空间
    if (node == NULL) { // 检查内存分配是否成功
        exit(1); // 若失败则退出程序
    }
    node->next = NULL; // 初始化 next 指针为空
    node->val = x; // 设置节点值
    return node; // 返回新创建的节点指针
}

/**
 * 根据给定整数 n 创建一个包含 n 个节点的环形链表,
 * 节点值从 1 到 n 依次递增。
 *
 * @param n 链表中节点的数量(整数)
 * @return 环形链表的尾节点指针
 */
ListNode* Link(int n) {
    ListNode* head = New_node(1); // 创建头节点
    ListNode* tail = head;

    // 循环创建并连接后续节点
    for (int i = 2; i <= n; i++) {
        tail->next = New_node(i);
        tail = tail->next;
    }

    // 将尾节点与头节点相连形成环形链表
    tail->next = head;
    return tail;
}

/**
 * 删除环形链表中每 m 个节点中的倒数第二个节点,直到只剩下一个节点为止。
 * 最后返回该单个节点的值。
 *
 * @param n 环形链表中原始节点的数量(整数)
 * @param m 每隔几个节点删除一次倒数第二个节点(整数)
 * @return 剩余单个节点的值(整数)
 */
int ysf(int n, int m) {
    ListNode* prev = Link(n); // 创建并初始化环形链表
    ListNode* pcur = prev->next;
    int count = 1;

    // 遍历链表,直到只剩下一个节点
    while (pcur->next != pcur) {
        if (count == m) {
            prev->next = pcur->next; // 删除倒数第二个节点
            free(pcur);
            pcur = prev->next; // 更新 pcur 指向下一个有效节点
            count = 1;
        } else {
            prev = pcur;
            pcur = pcur->next;
            count++;
        }
    }

    // 销毁最后一个节点前获取其值
    int var = prev->val;

    // 释放最后一个节点内存
    free(prev);
    prev = NULL;

    return var; // 返回最后一个节点的值
}

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

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

相关文章

大数据平台搭建2024(一)

一&#xff1a;基础配置 创建虚拟机并查出ip地址进行连接 ip a1.配置node01静态ip地址与主机名 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改或添加如下内容&#xff1a; BOOTPROTO"static" ONBOOTyes #根据虚拟机网卡信息配置 IPADDR192.168.200.141 NET…

SQL-Post注入

Post注入 在登录过程中&#xff0c;输入用户名和密码&#xff0c;用户名和密码以表单的形式提交&#xff0c; 提交到服务器后服务器再进行验证。这就是一次post的过程的。 在输入正确的用户名和密码后显示 尝试会不会回显报错信息&#xff0c;输入admin--,回显报错了。 尝试…

一个文生视频MoneyPrinterTurbo项目解析

最近抖音剪映发布了图文生成视频功能,同时百家号也有这个功能,这个可以看做是一个开源的实现,一起看看它的原理吧~ 一句话提示词 大模型生成文案 百家号生成视频效果 MoneyPrinterTurbo生成视频效果 天空为什么是蓝色的? 天空之所以呈现蓝色,是因为大气中的分子和小粒子会…

Cisco ACI使用Postman配置交换机-未完待续

先看下不使用脚本的情况下是怎么配置交换机端口的&#xff1f; 例&#xff1a; 有10个交换机接口要开trunk&#xff0c;透传50个vlan&#xff0c; 使用GUI的操作方式为 1 进入EPG -->Static port 2 右键&#xff0c;绑定接口 3 选中node -->指定接口—>指定vlan —>…

Python赋能AI数据分析开启人工智能新时代

文章目录 一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一《编程菜鸟学Python数据分析》编辑推荐内容简介作者简介目录前言为什么要写这本书读者对象如何阅读本书 随着我国企业数字化和信…

每日一题(PTAL2-006):树的遍历--树的构建,队列

因为要层序遍历&#xff0c;所以我们可以考虑构建一颗二叉树。构建完只有利用队列就可以就行层序遍历。 #include <bits/stdc.h> using namespace std; int p1[35]; int p2[35]; typedef struct Tree {int val;struct Tree* left;struct Tree* right; }TT; typedef TT* …

基于逐笔数据合成高频订单簿:DolphinDB 订单簿引擎

订单簿是交易市场上买卖双方正在报价的不同价格的列表。订单簿快照反应了特定时刻市场上的交易意图&#xff0c;比如交易活跃的证券标的往往有着密集的订单簿。订单簿快照对量化金融的交易策略、风险管理和市场分析等方面都具有重要意义。 通常交易所可以提供实时和历史的行情…

【ROS2笔记六】ROS2中自定义接口

6.ROS2中自定义接口 文章目录 6.ROS2中自定义接口6.1接口常用的CLI6.2标准的接口形式6.3接口的数据类型6.4自定义接口Reference 在ROS2中接口interface是一种定义消息、服务或动作的规范&#xff0c;用于描述数据结构、字段和数据类型。ROS2中的接口可以分为以下的几种消息类型…

鸿蒙南向开发:【编译和烧录】指导

编译 #进入源码目录 #rm -rf ohos_config.json #hb set #. #如下图所示,按↑↓键&#xff0c;选择需要编译的工程名&#xff0c;然后回车 #hb build -f #然后回车&#xff0c;等待屏幕出现&#xff1a;BUILD SUCCESS字样&#xff0c;说明编译成功。如下图 #编译生成的固件在…

WPS的JS宏如何实现全文件路径字符串中截取文件名(excel)

从全文件路径的字符串中&#xff0c;截取文件名称&#xff0c;例如&#xff1a; 全文件路径字符串为&#xff1a;C:\Windows\System32\drivers\acpi1.sys 需要截取文件名&#xff1a;acpi1.sys 方法如下&#xff1a; 1、简单的方式&#xff1a;把全文件路径字符串拷贝&…

优斯特:防静电包装解决方案的巧妙运用

在现代电子产品生产与运输领域&#xff0c;防静电包装已成为保障产品安全的必备环节。优斯特凭借其创新的防静电包装解决方案&#xff0c;为客户提供了一种巧妙的方式来确保产品在存储和运输过程中不受静电影响&#xff0c;并且不会被刮花或损坏。 静电对产品的影响 静电对电子…

淘系电商课程,0基础实战教学,实操性系统性实时性

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89064789 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 00.前言一做好电商的基本认知 .mp4 01.电商卖货的底层逻辑和权重解析,mp4 02.做好产品的前期准备工作.mp4 03.店铺如何布局产品,m…

开源全方位运维监控工具:HertzBeat

HertzBeat&#xff1a;实时监控系统性能&#xff0c;精准预警保障业务稳定- 精选真开源&#xff0c;释放新价值。 概览 HertzBeat是一款深受广大开发者喜爱的开源实时监控解决方案。它以其简洁直观的设计理念和免安装Agent的特性&#xff0c;实现了对各类服务器、数据库及应用…

毕设论文的分类号与UDC查询

对于毕业论文分类号与UDC&#xff0c;可以根据个人研究领域查询。 中图分类号查询链接&#xff1a; 中图分类号查询 | 中国图书馆分类法 | 中图法 | 中图分类号 (clcindex.com)https://www.clcindex.com/category/ UDC查询链接: UDC Summaryhttps://udcsummary.info/php/ind…

8thWall vs. AR.js

对于熟悉 JavaScript、WebGL 和 HTML5 等 Web 技术的数字创作者来说&#xff0c;8th Wall 提供了功能丰富且强大的 AR 开发平台&#xff0c;尽管价格较高。 然而&#xff0c;新手开发人员和专注于基于标记的 AR 的开发人员可能会发现 AR.js 更易于使用且更经济实惠。 1、8th Wa…

【央国企专场】——军工研究所

研究所目录 一、企业概述1.1 中国航天1.2 中国电科1.3 中国船舶1.4 中国兵器 二、招聘信息2.1 中国航天2.2 中国电科2.3 中国船舶2.4 中国兵器 一、企业概述 在校招中会有很多企业来学校开宣讲会&#xff0c;其中就有许多广为人知的军工研究所&#xff0c;比如&#xff1a;中国…

外面收费的彩虹自助下单系统模板

搭建教程 下载之后上传到template文件夹里面 注意带上里面的文件夹 然后去后台替换就行 源码免费下载地址抄笔记 (chaobiji.cn)

Kafka、RabbitMQ、Pulsar、RocketMQ基本原理和选型

Kafka、RabbitMQ、Pulsar、RocketMQ基本原理和选型 1. 消息队列1.1 消息队列使用场景1.2. 消息队列模式1.2.1 点对点模式&#xff0c;不可重复消费1.2.2 发布/订阅模式 2. 选型参考2.1. Kafka2.1.1 基本术语2.1.2. 系统框架2.1.3. Consumer Group2.1.4. 存储结构2.1.5. Rebalan…

目标检测算法——YOLOV9——算法详解

一、主要贡献 深度网络输入数据在逐层进行特征提取和空间变换时&#xff0c;会丢失大量的信息。针对 信息丢失问题&#xff0c;研究问题如下&#xff1a; 1&#xff09;从可逆功能的角度对现有深度神经网络架构进行了理论分析&#xff0c;解释了许多过去难以解释的现象&#xf…

AppleScript初体验,让你的mac实现自动化UI操作

AppleScript 简介 AppleScript是苹果公司开发的一种脚本语言&#xff0c;用于操作MacOS及其应用程序&#xff0c;在实现MacOS自动化工作方面非常给力。 我们可以使用AppleScript用来完成一些重复琐碎的工作&#xff0c;AppleScript具有简单自然的语法&#xff0c;另外系统也提…