——   阿里云购买流程   ——
加入阿里云合作伙伴[云创得力]关联大客户账户购买阿里云产品,享受更多优惠
1.申请产品优惠

咨询客服或网络在线咨询,协助上云服务
点击关联阿里云填写表单,等待客服服务

2.关联大客户账户

①无账号:客服微信发送的注册链接进行关联
②已注册阿里云:客服微信发送关联链接
续费、充值、新购均享优惠。

3.阿里云官网提交订单

产品架构师协助客户挑选配置
阿里云官网选配置提交订单

4.付款开通

付款后,即可申请阿里云原价发票

5.申请阿里云发票凭据

购买后可申请阿里云原价发票

6.技术服务

免费协助配置、备案,售后7*24反馈,全周期专业服务
最高可选208 vCPU,内存3072 GiB,带宽35GBps

热门产品  :
上云必购  :
云服务器 ECS hot
云虚拟主机 hot
云数据库 RDS MySQL 版
云数据库 Redis 版
云数据库 HBase 版
对象存储 OSS
块存储
表格存储
负载均衡
共享流量包
全站加速 CDN
弹性公网 IP
VPN 网关
产品搭配  :
域名注册 hot
阿里企业邮箱 hot
短信服务
日志服务 SLS
内容安全
SSL 证书
号码隐私保护
实时计算 Flink 版
堡垒机
消息队列 Kafka
数据库审计
核心产品  :
DDoS 防护 hot
WEB应用防火墙 hot
SSL 证书
云防火墙
漏洞扫描
CDN
渗透测试
游戏盾
企业应用  :
网站建设 hot
企业网站定制 hot
小程序云
短信服务

Python3实现旋转数组的3种算法

发布时间:2020-12-10 11:43:52

  一、试题

  给出一个数组,将数组中的元素往右边移动k个位置,当中k是非负数。

  比如说:

  输入:[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]*

  反映:

  1.竭尽所能想到越多的解决方案,起码有三种不一样的方法能够处理这个问题。

  2.必须要使用空间复杂度为O(1)的原地算法。

  二,解题算法

  解法一

  以倒数第k个值为分界线,把nums截成两组再搭配。由于k可能超过nums的长度(当这两者一样的过程中,就等同于nums不存在移动),故此大家取k%len(nums),k和nums的长度取余,便是最终大家必须要移动的位置

  代码给出:

if nums:
  k = k % len(nums)
  nums[:]=nums[-k:]+nums[:-k]
时间:64ms
假设:
nums= [1,2,3,4,5,6,7]
k =3
运行结果:
[5, 6, 7, 1, 2, 3, 4]

  解法二

  先把nums最后一位移动到第一位,随后删除最后一位,循环k次。k=k%len(nums),取余

  代码给出:

if nums:
  k = k % len(nums)
  while k > 0:
    k -= 1
    nums.insert(0, nums[-1])
    nums.pop()
时间:172ms
假设:
nums= [1,2,3,4,5,6,7]
k =3
运行结果:
[5, 6, 7, 1, 2, 3, 4]

  解法三:

  先把nums复制到old_nums,随后nums中索引为x的元素移动k个位置后,当前索引为x+k,其值为old_nums[x]。,故此大家把x+k处理成(x+k)%len(nums),取余操作,减少重复的次数。

  代码给出:

if nums:
  old_nums = nums[:]
  l = len(nums)
  for x in range(l):
    nums[(x+k) % l] = old_nums[x]
时间:64ms
假设:
nums= [1,2,3,4,5,6,7]
k =3
运行结果:
[5, 6, 7, 1, 2, 3, 4]


产品问题、配置报价、售后请添加微信客服
产品使用问题、技术团队微信学习交流群(实时更新)