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

企业英文网站建设苏州seo怎么做

企业英文网站建设,苏州seo怎么做,聊城做网站推广公司,淘宝客网站的模板原题:https://leetcode.cn/problems/rotate-array/description/ 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1…

原题:https://leetcode.cn/problems/rotate-array/description/

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]

解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]

解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

开始的思路是通过mod运算完成循环的效果,从第一个位置元素起逐渐以步长k往下一个元素循环递推赋值,直到回到第一个位置元素。

from typing import Listclass Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""arr_len = len(nums)curr_idx, curr_num = 0, nums[0]while True:next_idx = (curr_idx + k) % arr_lenif next_idx == 0:nums[next_idx] = curr_numbreaknums[next_idx], curr_num = curr_num, nums[next_idx]curr_idx = next_idxprint(nums)if __name__ == '__main__':s = Solution()s.rotate(nums=[1, 2, 3, 4, 5, 6, 7], k=3)s.rotate(nums=[-1, -100, 3, 99], k=2)# [5, 6, 7, 1, 2, 3, 4]
# [3, -100, -1, 99]

可以看到第一个输出正确,第二个输出错误。

原因

上面方式只适用于数组长度n和步长k互质的情况。主要可以通过下面两点证明来理解:

1.循环数组中,从任意位置经过有限步步长移动后,一定会再次回到起始位置。

假设起始位置下标i,其实就是需要证明(i + mk) mod n = i,也就是证明mk mod n = 0m是至少需要移动的次数。

分两种情况:
1)nk互质,此时最小的移动次数显然等于ngcd(n, k)=1
2)nk不互质,设最大公约数gcd(n, k)=d n ′ = n d n'=\frac{n}{d} n=dn k ′ = k d k'=\frac{k}{d} k=dk,其中 n ′ 、 k ′ n'、k' nk互质。此时上面等式等价于 m d k ′ m o d d n ′ = 0 mdk'\mod dn' = 0 mdkmoddn=0,化简为=> m k ′ m o d n ′ = 0 mk' \mod n'=0 mkmodn=0,因此当m= n ′ n' n的时候成立。

综上,得证。

2.循环数组中环的数量等于数组长度n和步长k的最大公约数。

1中的证明其实说明从每个下标起始,m次移动后又会再次回到这个下标,这个过程其实构成了一个环,移动的次数就是环中的元素数量。并且因为是等距移动,所以环和环之间的元素也不会冲突。

同样分为nk互质和不互质两种情况:
1)互质:根据1,需要移动n次,数组长度n,所以环的数量1。
2)不互质:同样根据1,需要移动 n ′ n' n次,所以每个环中的元素数量也是 n ′ n' n,所以环的数量= n n ′ \frac{n}{n'} nn=d。

正确答案

求出环的数量,遍历环的起始下标。

from typing import Listclass Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""import matharr_len = len(nums)gcd_ans = math.gcd(arr_len, k)for idx in range(gcd_ans):  # 每个环的起始下标curr_idx, curr_num = idx, nums[idx]while True:next_idx = (curr_idx + k) % arr_lenif next_idx == idx:nums[next_idx] = curr_numbreaknums[next_idx], curr_num = curr_num, nums[next_idx]curr_idx = next_idxprint(nums)if __name__ == '__main__':s = Solution()s.rotate(nums=[1, 2, 3, 4, 5, 6, 7], k=3)s.rotate(nums=[-1, -100, 3, 99], k=2)# [5, 6, 7, 1, 2, 3, 4]
# [3, 99, -1, -100]
http://www.tj-hxxt.cn/news/100812.html

相关文章:

  • 开源网站推广重庆seo排名方法
  • 阿里云ecs 多个网站十句经典广告语
  • 学做饼干网站企业类网站有哪些例子
  • 企业网站建设绪论网页设计用什么软件做
  • 什么网站做ppt好台州关键词优化服务
  • 哈尔滨政府网站建设怎么开通百度推广账号
  • 太平洋保险网站做的这么烂营销咨询公司经营范围
  • wordpress下载地址插件seo引擎优化是做什么的
  • 广告网站模板下载 迅雷下载安装信息流广告投放平台
  • 网站内页权重怎么查济南seo优化公司助力排名
  • 福州网站设计哪里建站网络平台
  • golang网站开发教程广东网络seo推广公司
  • 小学网站logo怎么做营销型网站建设题库
  • 网站客服系统免费版官网app开发公司有哪些
  • 网站建设解决方案好处搜外seo视频 网络营销免费视频课程
  • 最近中文字幕2018免费版2019搜索优化整站优化
  • 百度网站建设的十一个石家庄百度seo代理
  • 金华seo扣费优化网络推广外包
  • 十大免费自媒体素材网站百度一下浏览器
  • 网站制作宣传网络营销的主要传播渠道
  • 国外网站推广宣传搜索引擎优化与推广技术
  • 用dw怎么做登录页面的网站苏州优化seo
  • wordpress没法做大网站全媒体广告策划营销
  • 网站建设大客户沟通技巧直播回放老卡怎么回事
  • 淘客类网站如何做排名自媒体人15种赚钱方法
  • 做网站公司的介绍长沙网站设计
  • 洛阳市网站建设新闻媒体发布平台
  • 网站根目录验证文件是什么怎么自己注册网站
  • 中科建建设发展有限公司网站昆明做网站的公司
  • 枞阳做网站的推广联盟平台