剑指 Offer 62. 圆圈中最后剩下的数字
题目:
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
示例 1:
输入: n = 5, m = 3 输出: 3
示例 2:
输入: n = 10, m = 17 输出: 2
限制:
1 <= n <= 10^5
1 <= m <= 10^6
代码:
//超时了
1 import java.util.*; 2 3 /** 4 * @author zcy 5 * @date 2021年04月11日 16:28 6 */ 7 8 class Solution { 9 public int lastRemaining(int n, int m) { 10 11 List<Integer> list = new LinkedList<>(); 12 for (int i = 0; i < n; i++) { 13 list.add(i ); 14 } 15 //上一次删除时,删除下标前一位的下标 16 int index = -1; 17 while (n > 1) { 18 int t = index + m; 19 //取模,因为可能超过长度 20 t = t % n; 21 list.remove(t); 22 //在头尾的话index都会到最后一个位置 23 if(t==0||t==n-1){ 24 index=n-2; 25 }else{ 26 index=t-1; 27 } 28 n--; 29 } 30 return list.get(0); 31 } 32 }
代码2:
//约瑟夫环问题
1 import java.util.*; 2 3 /** 4 * @author zcy 5 * @date 2021年04月11日 16:28 6 */ 7 8 class Solution { 9 public int lastRemaining(int n, int m) { 10 int p=0; 11 for(int i=2;i<=n;i++){ 12 p=(p+m)%i; 13 } 14 return p; 15 16 } 17 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术