目录

  • 题目描述:
  • 示例 1:
  • 示例 2:
  • 算法:

题目描述:

给定一个数组,将数组中的元素向右移动 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) 的原地算法。

算法:

class Solution {
public:void rotate1(vector<int>& nums, int k){// method 1int sz = nums.size();if(k <= sz/2){for(int i = 0; i < k; i++){// for the i-th stepint pre = nums[sz-1];for(int j = sz - 1; j > 0; j--){nums[j] = nums[j-1];}nums[0] = pre;}}else{k = sz - k;for(int i = 0; i < k; i++){// for the i-th stepint pre = nums[0];for(int j = 0; j < sz - 1; j++){nums[j] = nums[j+1];}nums[sz - 1] = pre;}}}int gcd(int a, int b){int c = a;while(a % b){c = a % b;a = b;b = c;}return b;}void rotate2(vector<int>& nums, int k){// method 2int sz = nums.size();int cycle = gcd(sz, k);int _sz = sz / cycle;for(int i = 0; i < cycle; i++){int val = nums[i];int idx = i;int pre = 0;for(int j = 0; j < _sz-1; j++){pre = (idx + sz - k)%sz;nums[idx] = nums[pre];idx = pre;}nums[idx] = val;}}void flip(vector<int>& nums, int start, int end){while(start < end){swap(nums[start++], nums[end--]);}}void rotate3(vector<int>& nums, int k){// method 3// target: move the last k elements to the front// 1. flip the whole vector// 2. flip the first k elements// 3. flip the rest of elementsint sz = nums.size();flip(nums, 0, sz-1);flip(nums, 0, k-1);flip(nums, k, sz-1);}void rotate(vector<int>& nums, int k) {int sz = nums.size();if(sz <= 1){return ;}else{k %= sz;}if(k == 0){return ;}// rotate1(nums, k);   // time limitedrotate2(nums, k);   // accept// rotate3(nums, k);   // accept}
};

转载于:https://www.cnblogs.com/zhanzq/p/10564544.html

leetcode 189. 旋转数组(Rotate Array)相关推荐

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

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

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

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

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

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

  4. leetcode(189) 旋转数组

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

  5. leetcode 189. 旋转数组

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

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

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

  7. 189. 旋转数组 golang

    一个引出较多知识点的题 关于golang的append函数的踩坑 剑指offer-翻转字符串 557. 反转字符串中的单词 III 题目 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k ...

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

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

  9. 刷爆LeetCode之旋转数组

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

  10. LeetCode 初级 - 旋转数组

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

最新文章

  1. 华为mate30会用鸿蒙嘛,华为Mate30安卓系统再遭限制,鸿蒙系统真的要应战了
  2. 计算机ui答辩,KGUT1027 班级UI设计第一阶段成长答辩开始啦
  3. Android国际化(多语言)实现,支持8.0
  4. 让chrome浏览器支持跨域
  5. Linux后台开发应该具备技能
  6. 多媒体开发之wis-stream
  7. 苹果电脑快捷键有哪些?mac系统快捷键大全详细介绍(全部)_苹果MAC_操作系统_脚本之家
  8. 计算机组成原理2套题,计算机组成原理试卷2套含答案(大学期末复习资料).doc...
  9. linux下vi命令大全
  10. 【数据仓库与OLAP技术】期末复习+考题
  11. ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信)
  12. Cognos函数(二十二) - ancestor
  13. Python遥感开发之GDAL读写遥感影像
  14. NoSQLBooster for MongoDB基本使用步骤
  15. 中山技术学院计算机学院,计算机科学与技术学院
  16. 神经网络建模的适用范围,神经网络建模步骤视频
  17. python27是什么文件夹可以删除吗_python如何跳过错误继续运行,同时删除产生错误的文档...
  18. 性能测试:深入理解并发量,线程数,吞吐量,TPS
  19. 关于Java垃圾回收问题的总结
  20. python无法打开文件_Python无法打开文件“没有这样的文件或目录”

热门文章

  1. RxJava Map操作详解
  2. 你知道数据库索引的工作原理吗?
  3. 2008R2Win7管理八DNS新功能及常规管理
  4. 向Yahoo Mail的主页学习
  5. parse data from Nacos error
  6. Address already in use: bind 端口被占用的解决办法
  7. 一个基于protobuf的极简RPC
  8. python自定义规律绘制_ForMaiR - 自定义规则的邮件自动转发工具
  9. hive 如果表不存在则创建_Hive DDL
  10. 小型 web 服务器系统,小型WEB服务器 - 应用服务器是什么_应用服务器有哪些