当前位置: 首页 > news >正文

剑指offer——约瑟夫环

题目链接:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)

 

解题思路:

这个题其实要注意,LinkedList和ArrayList的区别。

1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
2.对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

 

1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是 统一的,分配一个内部Entry对象。
2.在ArrayList集合中添加或者删除一个元素时,当前的列表所所有的元素都会被移动。而LinkedList集合中添加或者删除一个元素的开销是固定的。
3.LinkedList集合不支持 高效的随机随机访问(RandomAccess),因为可能产生二次项的行为。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

 1 import java.util.LinkedList;
 2 import java.util.ArrayList;
 3 public class Solution {
 4     public int LastRemaining_Solution(int n, int m) {
 5         ArrayList<Integer> list = new ArrayList<Integer>();
 6         if(m<1||n<1)
 7             return -1;
 8         for(int i=0;i<n;i++)
 9             list.add(i);
10         
11         int size = list.size();
12         int current=0;
13         int shuzi = m-1;
14         while(list.size()>1)
15         {
16             list.remove((current+shuzi)%size);
17             current = (current+shuzi)%size;
18             size--;
19         }
20         return list.remove(0);
21     }
22 }
 1 import java.util.LinkedList;
 2 import java.util.ArrayList;
 3 public class Solution {
 4     public int LastRemaining_Solution(int n, int m) {
 5         LinkedList<Integer> list = new LinkedList<Integer>();
 6         if(m<1||n<1)
 7             return -1;
 8         for(int i=0;i<n;i++)
 9             list.add(i);
10         
11         int size = list.size();
12         int current=0;
13         int shuzi = m-1;
14         while(list.size()>1)
15         {
16             list.remove((current+shuzi)%size);
17             current = (current+shuzi)%size;
18             size--;
19         }
20         return list.remove();
21     }
22 }

 

转载于:https://www.cnblogs.com/wangyufeiaichiyu/p/10902030.html

相关文章:

  • 爬虫的浏览器伪装技术
  • ChannelPipeline
  • 你需要的物流运输类报表,都在这里
  • 本地Navicat远程连接Centos7服务器出现的错误汇总
  • 转载一篇让你全面了解什么是.NET。
  • Java设计模式: 单例模式
  • webpack4.0介绍与使用(一)
  • Java 8中处理集合的优雅姿势——Stream
  • Linux上部署Springboot相关命令
  • ArrayList中的ConcurrentModificationException,并发修改异常,fail-fast机制。
  • vue-cli从2升级到3报错error 404 Not Found: @wry/context@^0.4.0
  • 创建数据结构库基础设施——异常类的构建
  • Windows下SVN的下载、安装
  • centOS7网络配置
  • angularJS 自定义服务
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ECMAScript入门(七)--Module语法
  • Java新版本的开发已正式进入轨道,版本号18.3
  • jdbc就是这么简单
  • maya建模与骨骼动画快速实现人工鱼
  • oldjun 检测网站的经验
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Vue小说阅读器(仿追书神器)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 机器学习中为什么要做归一化normalization
  • 浏览器缓存机制分析
  • 如何利用MongoDB打造TOP榜小程序
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序 setData 学问多
  • 新书推荐|Windows黑客编程技术详解
  • 移动端唤起键盘时取消position:fixed定位
  • 智能网联汽车信息安全
  • 阿里云服务器如何修改远程端口?
  • 如何用纯 CSS 创作一个货车 loader
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​TypeScript都不会用,也敢说会前端?
  • ​力扣解法汇总946-验证栈序列
  • #大学#套接字
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (六)vue-router+UI组件库
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)socket Aio demo
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net操作Excel出错解决
  • .NET委托:一个关于C#的睡前故事
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @vue/cli脚手架
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [Android] Upload package to device fails #2720
  • [CentOs7]搭建ftp服务器(2)——添加用户