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

算法练习——189.轮转数组

1.题目描述

给定一个整数数组 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]

提示:

  • 1 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105

方法一:使用额外k个数组

2.1解题思路

        题目要求将数组中的元素向右轮转 k 个位置,首先排除特殊情况,将长度等于一的数组返回,k值大于数组长度时将k值对数组长度取余,然后设置一个长度为k的切片,将当前数组最后面的k 个元素先存入到切片中去,然后将数组前面的 len(nums) - k 个元素依次向后面挪动k个位置,最后将切片中的 k 个元素放入到nums数组的前 k 个位置中,这样就实现了将数组中的元素向右轮转 k 个位置。

         代码展示:

func rotate(nums []int, k int) {n := len(nums)if n == 0 {return}k = k % ntemp := make([]int, k)for i := 0; i < k; i++ {temp[i] = nums[n - k + i]}for i := n - 1; i >= k; i-- {nums[i] = nums[i - k]}for i := 0; i < k; i++ {nums[i] = temp[i]}
}

方法二:使用额外n 个数组

2.2解题思路

        第一步:建立一个创建了一个和原数组 nums 长度相同的新切片num,用于临时存储旋转后的元素。第二部:对于原数组中索引为 i 的元素,向右旋转 k 个位置后的新索引为 (i + k) % len(nums);第三步:copy(nums, newNums) 将新数组的内容复制到原数组 nums 中,实现 “原地修改” 的效果(虽然内部用了新数组,但最终修改了原数组的内容)。

代码展示:

func rotate(nums []int, k int) {n := len(nums)temp := make([]int, n)for i := 0;i < n; i++ {temp[(i+k)%n] = nums[i]}copy(nums,temp)
}

方法三:三次反转法

2.3解题思路        

        写一个翻转reverse函数,先整体旋转一次,再将前k个元素翻转一次,最后将后len(nums)个元素翻转一次

代码展示:

func rotate(nums []int, k int) {n := len(nums)k = k%nif n == 0 || k == 0 {return}reverse(nums,0,n-1)reverse(nums,0,k-1)reverse(nums,k,n-1)
}
func reverse(nums []int, start,end int) {for start < end {nums[start], nums[end] = nums [end], nums[start]start++end--}
}

http://www.xdnf.cn/news/1424557.html

相关文章:

  • 【逆序对 博弈】P10737 [SEERC 2020] Reverse Game|普及+
  • 【开题答辩全过程】以 基于JSP的养生网站设计与实现为例,包含答辩的问题和答案
  • MySQL 中 InnoDB 引擎的事务隔离级别与“可重复读”隔离级别下的 SQL 编写规范
  • Linux 进程间通信(IPC)
  • 大型语言模型微调 内容预告(69)
  • 【Docker】2025版Ubuntu 22.04 安装 Docker Docker Compose 指南
  • 电力工程师的AI时代已来,这6大功能彻底颠覆传统工作模式
  • 系统性学习数据结构-第二讲-顺序表与链表
  • 金融数据安全
  • 基于单片机汽车防盗系统/汽车安全防丢系统
  • 动态代理设计模式
  • 多模态大语言模型部署
  • Java泛型通配符详解:搞懂?/extends/super用法,避开集合操作踩坑点
  • 二、感知机
  • 高防IP防护效果评估全攻略:从指标解读到实战测试
  • langgraph / openmanus / suna 对比
  • 数据安全不用愁,群晖NAS让你存得放心、用得安心
  • 深度学习环境搭建运行(二) Ubuntu22.04安装基于CUDA11.8的ONNXRuntime-gpu1.18.1详细步骤(新手入门)
  • 联邦学习的文献复现与创新思路指导
  • Qt 项目文件(.pro)中添加 UI 文件相关命令
  • 深度学习】--卷积神经网络
  • k8s--etcd
  • h5实现内嵌微信小程序支付宝 --截图保存海报分享功能
  • authentication port-control auto 和 dot1x port-control auto
  • Linux ARP老化机制/探测机制/ip neigh使用
  • Paimon MergeTreeWrite、Compaction 和 快照构建
  • 甲烷浓度时空演变趋势分析与异常值计算(附下载脚本)
  • 基于docker-compose搭建EFK(Elasticsearch+fluentd+kibana)的日志平台
  • 2025年工作后值得考的财会行业证书推荐,尤其是第二个!
  • 从网络层接入控制过渡到应用层身份认证的过程