当前位置: 首页 > 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.dtcms.com/a/361992.html

相关文章:

  • 二、SVN基础命令速查表
  • Python OpenCV图像处理与深度学习:Python OpenCV对象检测入门-Haar级联分类器与人脸检测
  • LeetCode刷题-top100( 除自身以外数组的乘积)
  • MATLAB 实现同步压缩小波变换
  • C++ 虚继承:破解菱形继承的“双亲困境”
  • 拆解期货交易所:清算交收体系!
  • 配置sscms时被sql server处处刁难
  • 从 Skip Take 到 Keyset:C# 分页原理与实践
  • 考研复习-计算机网络-第一章-计算机网络概述
  • Parasoft C/C++test解析:覆盖率与可追溯性的软件测试协同方案
  • 免费GIS服务器方案:OGC标准3DTiles服务发布与跨平台渲染实践
  • 安全等保复习笔记
  • flume接收处理器:构建高可用与高性能的数据链路
  • Python 人工智能深度学习系统学习(附视频教程)
  • PowerPoint和WPS演示如何在放映PPT时用鼠标划重点
  • C++ STL序列容器-------list
  • 无人设备遥控器之安全加密体系
  • 【收藏级】Windows AI 本地开发「完全体」环境搭建清单
  • 多校区学校押金原路退回系统之免安装使用教程——东方仙盟
  • 计算机三级嵌入式填空题——真题库(28)原题附答案速记
  • matlab-神经网络的语音识别
  • 神经网络2——使用Keras实现MLP
  • 深度学习中常用的激活函数
  • 玩转OurBMC第二十二期:OurBMC之PCIe接口应用(上)
  • Triton Linalg编译
  • 系统性学习数据结构-第二讲-顺序表与链表
  • K8S-etcd数据库的相关操作
  • DHT11-温湿度传感器
  • 基于单片机智能饮水机/智能热水壶
  • Redis 如何实现分布式锁,以及redis的适应场景分析