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

门户网站建设总结今日小说排行榜百度搜索榜

门户网站建设总结,今日小说排行榜百度搜索榜,常州网站建设key de,win2008r2搭建php网站摘要 剑指 Offer 62. 圆圈中最后剩下的数字 一、约瑟夫环解析 题目中的要求可以表述为:给定一个长度为 n 的序列,每次向后数 m 个元素并删除,那么最终留下的是第几个元素?这个问题很难快速给出答案。但是同时也要看到&#xff…

摘要

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

一、约瑟夫环解析

题目中的要求可以表述为:给定一个长度为 n 的序列,每次向后数 m 个元素并删除,那么最终留下的是第几个元素?这个问题很难快速给出答案。但是同时也要看到,这个问题似乎有拆分为较小子问题的潜质:如果我们知道对于一个长度n - 1 的序列,留下的是第几个元素,那么我们就可以由此计算出长度为 n 的序列的答案。

我们将上述问题建模为函数 f(n, m),该函数的返回值为最终留下的元素的序号。

首先,长度为n的序列会先删除第m% n 个元素,然后剩下一个长度为n - 1的序列。那么,我们可以递归地求解 f(n - 1, m),就可以知道对于剩下的 n - 1 个元素,最终会留下第几个元素,我们设答案为 x = f(n - 1, m)。

由于我们删除了第 m % n 个元素,将序列的长度变为 n - 1。当我们知道了 f(n - 1, m) 对应的答案 x 之后,我们也就可以知道,长度为 n 的序列最后一个删除的元素,应当是从 m % n 开始数的第 x 个元素。因此有 f(n, m) = (m % n + x) % n = (m + x) % n。

我们递归计算 f(n, m), f(n - 1, m), f(n - 2, m), ... 直到递归的终点 f(1, m)。当序列长度为 1 时,一定会留下唯一的那个元素,它的编号为 0。

class Solution {public int lastRemaining(int n, int m) {return f(n, m);}public int f(int n, int m) {if (n == 1) {return 0;}int x = f(n - 1, m);return (m + x) % n;}
}

复杂度分析

  • 时间复杂度:O(n),需要求解的函数值有n个。
  • 空间复杂度:O(n),函数的递归深度为n,需要使用 O(n)的栈空间。

二、数学 + 迭代

class Solution {public int lastRemaining(int n, int m) {int f = 0;for (int i = 2; i != n + 1; ++i) {f = (m + f) % i;}return f;}
}

复杂度分析

  • 时间复杂度:O(n),需要求解的函数值有n个。

  • 空间复杂度:O(1),只使用常数个变量。

博文参考

《leetcode》

http://www.khdw.cn/news/28402.html

相关文章:

  • 做的比较好看的国内网站网络广告人社区官网
  • 鹤山市网站建设公司朝阳seo推广
  • 全网推广营销seo优化点击软件
  • 完整网站开发大数据平台
  • wordpress 招聘插件荥阳seo
  • 自己做视频网站犯法二级域名注册平台
  • 电子商务网站的建设开发工具制作网站的软件
  • 网络公司做网站的合同2345王牌浏览器
  • asp.net网站访问统计什么是交换链接
  • 武汉网站建设百家号互联网推广中心
  • 四川建网站百度高级搜索指令
  • 网站开发vs设计报告手机网页设计
  • 获取网站访客信息免费域名服务器
  • 微信小程序怎么加入我的小程序网站搜索优化
  • 云南网站建设运营全网营销公司
  • 视频网站建设 知乎软文经典案例
  • 网站开发需要多少钱app网络软文推广网站
  • 自己做短视频的网站百度竞价代运营
  • 网站制作 服务电脑软件推广平台
  • 网站首页介绍深圳纯手工seo
  • 塘沽做网站网站做优化好还是推广好
  • wordpress 更新媒体库上海网站seo排名优化
  • 建站论坛系统抖音seo软件
  • 可以做公众号背景图的网站今天全国31个省疫情最新消息
  • 中国建设银行网站用户网站收录排名
  • 网站开发包含哪些类别怎样免费制作网页
  • 网站html设置首页兰州做网站的公司
  • 网络运维日常工作内容谷歌优化排名公司
  • 专门做养老院的网站seo服务外包公司
  • 个人做外贸接订单网站h5网站制作平台