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

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

示例 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]**

方法一:通过空间换取时间的方式,在新的数据中排好在放入nums中,我写的代码比较冗余,刚开始没考虑到移动的步长会超过数组大小的情况

class Solution {public:void rotate(vector<int>& nums, int k) {//空间换时间int temp[nums.size()],temp_number=k,sub_number;//不改变k的大小int i,j;sub_number=temp_number/nums.size();temp_number=k-nums.size()*sub_number;int temp_number1=temp_number;printf("%d\n",sub_number);for(i=0;i<temp_number&&nums.size()>1;i++){temp[temp_number-i-1]=nums[nums.size()-i-1];}for(j=0;j<nums.size()-temp_number1&&nums.size()>1;j++){temp[temp_number++]=nums[j];}for(i=0;i<nums.size()&&nums.size()>1&&nums.size()!=k;i++){nums[i]=temp[i];}}
};

改进版本:

class Solution {public:void rotate(vector<int>& nums, int k) {int i,n=nums.size();int temp[n]; // 临时存储数据for(i=0;i<n;i++){temp[(i+k)%n]=nums[i];  }//数组复制for(i=0;i<n;i++){nums[i]=temp[i];}}
};

代码简化了一下,也更好理解了,优点先循环队列的思路

方法二:

class Solution {public:void reserve(vector<int>& nums,int begin,int end){int temp;while(begin<end){   temp=nums[begin];nums[begin]=nums[end];nums[end]=temp;begin++;end--;        }}void rotate(vector<int>& nums, int k) {k %= nums.size();reserve(nums, 0, nums.size() - 1);reserve(nums, 0, k - 1);reserve(nums, k, nums.size() - 1);}};

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

  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. 旋转数组

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

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

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

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

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

  7. 189. 旋转数组 golang

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

  8. 刷爆LeetCode之旋转数组

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

  9. LeetCode 初级 - 旋转数组

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

最新文章

  1. cloudera hbase集群简单思路
  2. ssas 为绑定指定的大小太小,导致一个或多个列值被截断
  3. Hdu 2089-不要62 数位dp
  4. 注释不能自动设置时间_微波炉维修|微波炉能加热食品,但是到了设定时间,不能自动断电。...
  5. 内窥镜冲洗装置行业调研报告 - 市场现状分析与发展前景预测
  6. 一个月被曝五次数据泄露,ElasticSearch还行不行?
  7. FreeTextBox使用
  8. VS2017社区版许可证过期问题
  9. sql语句合集大全(个人总结)
  10. Delphi xe5 StyleBook的用法(待续)
  11. 软件测试——风险分析
  12. 洛谷4578 LOJ2520:[FJOI2018]所罗门王的宝藏——题解
  13. OSChina 周三乱弹 —— 在 OSC 谁能横行霸道?
  14. vim命令模式和底线_VIM 底线命令模式
  15. shift+右键,没有“在此处打开命令窗口”选项
  16. 画中画 视频叠加 视频覆盖 overlay
  17. 发布一个JINI服务
  18. c++名字空间指令与名字空间声明
  19. 《程序员升职记》2.繁忙的收发室
  20. vscode设置背景护眼主题颜色、字体颜色不影响其他主题的颜色

热门文章

  1. Android转载一:Android文件命名规范
  2. android:configChanges属性总结
  3. js页面加载前执行_做一名合格的前端开发工程师:Javascript加载执行问题探索
  4. Java 获取linux根目录下的文件夹_Windows支持直接访问Linux子系统文件:你的下一台Linux何必是Linux...
  5. 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...
  6. 图片资源 php,php URL图片资源传参生成对应尺寸图片
  7. linux怎么进入文件夹_Linux基础命令《上》
  8. python数据类型所占字节数_python标准数据类型 Bytes
  9. php 编程祝新年快乐_用于测试自动化的7种编程语言
  10. 在给定约束下可以使用a,b和c形成的字符串数