一个引出较多知识点的题

关于golang的append函数的踩坑
剑指offer-翻转字符串
557. 反转字符串中的单词 III

题目

189. 旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

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

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:

尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的 原地 算法。

解法

题目: 1,2,3,4,5,6 k=2
第一步:6,5,4,3,2,1
第二步:5,6,4,3,2,1
第三步:5,6,1,2,3,4

func rotate(nums []int, k int) {if nil == nums {return}length := len(nums)// [-1] k = 2// 输入:[1,2] 3// 预期结果:// [2,1]if k > length { // 当k大于length就是把数组原地不动,再移动余数k %= length}if 0 == k || k == length {return}reverse(nums)reverse(nums[:k])reverse(nums[k:])
}
// 这个反转函数很多地方都用到了。记住
func reverse(nums []int) {for i, j := 0, len(nums)-1; i < j; i, j = i+1, j-1 {nums[i], nums[j] = nums[j], nums[i]}
}

append成功的一次做法

append本身会失效,但是这样操作就可以修改nums的值

func rotate(nums []int, k int)  {k %= len(nums)ans := append(nums[len(nums)-k:], nums[:len(nums)-k]...)nums = append(nums[:0], ans...)
}

189. 旋转数组 golang相关推荐

  1. 数组元素替换_LeetCode 题解 | 189. 旋转数组

    力扣 189. 旋转数组(点击查看题目) 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 示例 2: 说明: 尽可能想出更多的解决方案,至少有三种不同的方 ...

  2. LeetCode-数组-189. 旋转数组

    描述 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O( ...

  3. Leetcode 189. 旋转数组 解题思路及C++实现

    方法一:暴力方法 解题思路: 用栈存储后面的 k 个元素,然后将 nums 数组的元素往后挪 k 位,然后再将栈中的元素存进nums数组中. class Solution { public:void ...

  4. Leetcode 189. 旋转数组 (每日一题 20210909)

    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数.进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问 ...

  5. 文巾解题 189. 旋转数组

    1 题目描述 2 解题思路 2.1 轮转赋值 建立一个辅助数组,辅助数组第(i+k)%len(nums)位的值等于原来的nums数组的第i位的值 class Solution(object):def ...

  6. leetcode(189) 旋转数组

    **给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 你可以使用空间复杂度为 O(1) 的 原地 算法解 ...

  7. LeetCode 189. 旋转数组(环形替换)

    1. 题目 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向 ...

  8. leetcode 189. 旋转数组

    题目 思路 先左边翻转,再右边翻转,最后整体翻转. 注意存在翻转超过一个周期的情况,要先取余,避免越界. 题解 class Solution {public void rotate(int[] num ...

  9. 力扣--189旋转数组(中等)

    题目 python代码 1 颠倒列表法 def rotate(nums, k):if len(nums) < 2:returnnums.reverse()k = k % len(nums) #避 ...

最新文章

  1. plsql配置多数据源,想换哪个换哪个
  2. R语言jitter函数为数据添加噪声(noise)扰动信息实战
  3. python常用内置模块-Python之OS模块常用内置方法汇总
  4. LeetCode Bulb Switcher(约数个数为奇数)
  5. 031_mysql事务的安全隐患
  6. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计
  7. 中国程序员容易发音错误的单词
  8. 厉害了,BATJ 必考的 Java 面试题!
  9. SQLLite (一)基本介绍
  10. SpringMVC配置项学习笔记
  11. [转]ClassPath是什么
  12. 计算机应用属于工程与工程经济类,计算机及信息技术和电子技术应用哪种属于工程类或工程经济类专业?...
  13. 《Python程序设计开发宝典》全面上架(新书超低价优惠+转发积攒送书)
  14. C/C++ 进阶 —— static
  15. linux内核移植与开发板,基于uClinux内核移植ARM开发板应用
  16. 远程无人值守批量装机(图文详解)
  17. 未能完成该操作pkdownloaderror错误8_国家励志奖学金申请和审批操作指南
  18. 长链接短链接拉起拼多多问题
  19. 棕榈油跌停见顶,铁矿石认沽上涨,YP05惊天大反弹2022.3.14
  20. 【总结】利用AWS实现高可用性和云灾备

热门文章

  1. 利用border制作三角形原理
  2. Collections.sort的使用
  3. 【laravel】【转发】laravel 导入导出excel文档
  4. CF 961E Tufurama
  5. CCF - 201403-3 - 命令行选项
  6. 如何在 IIS 中设置 HTTPS 服务
  7. 专2-第二课 Eclipse开发环境搭建
  8. MySQL 导出命令
  9. 浙大计算机专硕培养方案,浙江大学硕士研究生培养方案
  10. oracle 老白,老白学编程 - Netdata学习 - numa