约瑟夫环(递归+迭代)

news2024/12/19 14:21:57

剑指 Offer 62. 圆圈中最后剩下的数字

leetcode

这题让我对递归和迭代又有了新的一层认识,首先一定要把图画对,就是模拟约瑟夫的这个过程
红色是被淘汰的位置,绿色的3是最后会活下来的人的位置
0 ~ n 正好是数组中的下标
重点在于计算 不同n时 幸存位置的下标,这里n = 5 去模拟淘汰的过程,2被淘汰,3就变成新的0号位置,循环下去模拟直到最后活下来的只有一个人就是3
n是固定的 那活下来的人也是固定的
本质就是我知道 n -1 = 4 时 队列情况是 3 4 0 1 时 3 的位置是0
(0 + 3)% 5 就可以得出 n = 5时 存活位置的下标 = 3
循环和递归就是 起点不同,分别是是开头(最下面)和结尾(最上面)

在这里插入图片描述

递归是从上往下,要知道当前f(n,m)的值, 需要知道 f(n-1,m)的值
那就出来了,求n 按照这个规律递归去求n-1
结束条件就是 n == 1 就是 0位置幸存

 int lastRemaining(int n, int m) {

        //递归  从上往下
         if(n == 1)
             return 0;
         return (lastRemaining(n-1,m)+m)%(n);

    }

循环是从下往上,只有一个人幸存位置就是0,那么从2个人开始,也就是n =2
这个好像更简单高效,毕竟循环不会栈溢出
根据画图和规律就是 : pos = (pos + m) % i; // %取余控制pos不会越界而是在范围里走
在这里插入图片描述

int lastRemaining(int n, int m) {

        //递归  从上往下
        // if(n == 1)
        //     return 0;
        // return (lastRemaining(n-1,m)+m)%(n);

        //非递归 从下往上
        int pos = 0;
        for(int i = 2; i <= n; i++)
        {
            pos = (pos + m) % i; // %取余控制pos不会越界而是在范围里走
        }
        return pos;
    }

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

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

相关文章

Java009——Java数据类型简单认识

围绕以下3点学习&#xff1a; 1、什么是Java数据类型&#xff1f; 2、Java数据类型的作用&#xff1f; 3、Java有哪些数据类型&#xff1f; 4、熟悉Java8大基本数据类型 一、什么是Java数据类型&#xff1f; 当我们写Java代码时&#xff0c;需要把数据保存在变量&#xff08;…

【备战秋招】每日一题:4月8日美团春招(三批)第一题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

Unity之反向动力学IK

1、如何使用 &#xff08;1&#xff09;给物体的父对象加上IK Manager的脚本 &#xff08;2&#xff09;在人物四肢骨骼末端和权杖末端创建空对象 &#xff08;3&#xff09;添加IK节点 选择Player 添加后会发现出现了一个Player的子对象IK节点 将权杖末端的GameObject拖入…

deepin搭建go开发环境(git、go、neovim、NvChad、Nerd Font)

安装deepin虚拟机 官网下载地址 vmware中记得版本选择是debian 10.x 64位 然后就是一些确认操作&#xff0c;然后就可以了 安装git apt install gedit apt install git git config --global user.name "hello" git config --global user.email hello126.com git c…

Nginx之location与rewrite

Nginx之location与rewrite 一.location location 对访问的路径做访问控制或者代理转发1.匹配分类 精准匹配&#xff1a; location / {...} 前缀匹配&#xff1a; location ^~ / {...} 正则匹配&#xff1a; location ~ / {...} location ~* / {...} 部分…

直播带货APP小程序系统开发功能有哪些?

直播带货APP小程序系统开发功能有哪些&#xff1f; 1、直播带货&#xff1a;主播一边带货一边直播间活跃气氛&#xff0c;直观地了解产品&#xff0c;下单的概率会更高。还集有观看、打赏、购物、分享于一体。 2、短视频带货&#xff1a;短视频种草&#xff0c;利…

图数据库(一):Neo4j入门

什么是Neo4j 我们可以看一下百度百科对其的定义&#xff1a;Neo4j是一个高性能的,NOSQL图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎&#xff0c;但是它将结构化数据存储在网络(从数学角度…

北京云服务器安装anaconda、cuda、cudnn、torch流程

安装顺序&#xff1a;Anaconda->cuda->cudnn ->torch(根据cuda安装torch) 1读取anaconda module load anaconda/2020.11 2读取cuda cudnn module load cuda/11.1 cudnn/8.2.1_cuda11.x (查看cuda版本: nvcc -V) 3运行脚本 sbatch train.sh 脚本写法 #!/bin/bash #SB…

Nextcloud私有云 - 零基础搭建私有云盘

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章&#xff1a;使用Nextcl…

hash传递攻击

简介 Pass the hash也就是Hash传递攻击&#xff0c;简称为PTH。模拟用户登录不需要用户明文密码只需要hash值就可以直接来登录目标系统。 利用前提条件是&#xff1a; 开启445端口开启ipc$共享 Metasploit pesexec模块 windows/smb/psexec 这里主要设置smbuser、smbPass …

Docker镜像与Docker容器详解

文章目录 Docker帮助信息Docker镜像拉取镜像镜像仓库官方与非官方镜像仓库 拉取指定标签的镜像为镜像打多个标签搜索镜像镜像和分层共享镜像层根据摘要拉取镜像删除镜像总结 Docker容器启动一个简单的容器容器进程容器生命周期优雅的退出容器利用重启策略进行容器的自我修复Web…

7. JVM调优实战及常量池详解

JVM性能调优 1. 阿里巴巴Arthas详解1.1 Arthas使用 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 1、阿里巴巴Arthas调优工具详解 2、GC日志详解与调优分析 3、Class常量池与运行…

氟化物选择吸附树脂Tulsimer ®CH-87 ,锂电行业废水行业矿井水除氟专用树脂

氟化物选择吸附树脂 Tulsimer CH-87 是一款去除水溶液中氟离子的专用的凝胶型选择性离子交换树脂。它是具有氟化物选择性官能团的交联聚苯乙烯共聚物架构的树脂。 去除氟离子的能力可以达到 1ppm 以下的水平。中性至碱性的PH范围内有较好的工作效率&#xff0c;并且很容易再生…

Ingress详解

Ingress Service对集群外暴露端口两种方式&#xff0c;这两种方式都有一定的缺点&#xff1a; NodePort &#xff1a;会占用集群集群端口&#xff0c;当集群服务变多时&#xff0c;缺点明显LoadBalancer&#xff1a;每个Service都需要一个LB&#xff0c;并且需要k8s之外设备支…

[洛谷]P2960 [USACO09OCT]Invasion of the Milkweed G(BFS,坑点多多)

、1&#xff1a;坐标是反的&#xff0c;&#xff08;1&#xff0c;1&#xff09;是在左下角&#xff0c;正常在右上角&#xff0c;所用建图的时候要小心 2&#xff1a; 加node(),搭配 中的构造 3&#xff1a; 不用判断位置是否越界&#xff0c;数组从1&#xff0c;1开始&…

网络安全通信HTTPS原理

背景 HTTPS并不是一个全新的协议&#xff0c;而是为了保证网络通信的数据安全&#xff0c;在HTTP的基础上加上了安全套件SSL的一个数据通信协议。 HTTP协议全称为HyperText Transfer Protocol即超文本传输协议&#xff0c;是客户端浏览器与Web服务器之间的应用层通信协议。HT…

秘钥失效问题

一、发现问题 问题如下图代码&#xff1a; $ ssh root108.61.163.242 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is …

前端入门学习

封装axios axios的基础使用 axios基础使用方法&#xff1a; axios.create({config}) //创建axios实例 axios.get(url,{config}) //get请求 axios.post(url, data,{config}) //post请求 axios.interceptors.request.use() // 请求拦截器 axios.interce…

华为OD机试真题 Java 实现【高矮个子排队】【2023Q2 100分】,附详细解题思路

一、题目描述 现在有一队小朋友&#xff0c;他们高矮不同&#xff0c;我们以正整数数组表示这一队小朋友的身高&#xff0c;如数组{5,3,1,2,3}。 我们现在希望小朋友排队&#xff0c;以“高”“矮”“高”“矮”顺序排列&#xff0c;每一个“高”位置的小朋友要比相邻的位置高…

工业相机分类、相关参数含义

一、工业相机参数 1、分辨率 分辨率是相机最基本的参数&#xff0c;由相机所采用的芯片分辨率决定&#xff0c;在采集图像时&#xff0c;相机的分辨率对检测精度有很大的影响&#xff0c;在对同样大的视场&#xff08;景物范围&#xff09;成像时&#xff0c;分辨率越高&…