前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >189. Rotate Array(三步旋转法)

189. Rotate Array(三步旋转法)

作者头像
yesr
发布2019-03-14 12:57:37
5550
发布2019-03-14 12:57:37
举报
文章被收录于专栏:leetcode_solutions

Rotate Array

【题目】

Given an array, rotate the array to the right by k steps, where k is non-negative.

(翻译:给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。)

Example 1:

代码语言:javascript
复制
Input: [1,2,3,4,5,6,7] and k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]

Example 2:

代码语言:javascript
复制
Input: [-1,-100,3,99] and k = 2
Output: [3,99,-1,-100]
Explanation: 
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]

【分析】

采用经典的三步旋转法:

  1. 将整个数组 (array) 的元素前后颠倒得到array1(即:index: 0 与 index: array.length - 1)
  2. 将array1的前k个元素前后颠倒得到array2(即:index: 0 与 index: k -1)
  3. 将array2的后n - k(n为数组元素个数)个元素前后颠倒得到array3,即最终结果

Java代码实现如下:

代码语言:javascript
复制
class Solution {
    public void rotate(int[] nums, int k) {
        k %= nums.length;
        reverse(nums, 0, nums.length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.length - 1);
    }
    public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rotate Array
  • 【题目】
  • 【分析】
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档