轮转数组(Java)

大家好我是苏麟 , 这篇文章是凑数的 ...

轮转数组

描述 : 

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

题目 :

牛客 NC110 旋转数组:

轮转数组(Java)_第1张图片

 这里牛客给出了数组长度我们直接用就可以了 . 

LeetCode 189.轮转数组 :

189. 轮转数组

轮转数组(Java)_第2张图片

分析 :

这个题怎么做呢?你是否想到可以逐次移动来实现? 理论上可以,但是实现的时候会发现要处理的情况非常多,比较难搞。这里介绍一种简单的方法: 两轮翻转

方法如下:
1.首先对整个数组实行翻转,例如[1,2,3,4,5,6,7] 我们先将其整体翻转成[7,6,5,4,3,2,1].

2.从 k 处分隔成左右两个部分,这里就是根据k将其分成两组 [7,6,5] 和[4,3,2,1].

3.最后将两个再次翻转就得到[5,6,7] 和[1,2,3,4],最终结果就是[5,6,7,1,2,3,4].

解析 :

// LeetCode
class Solution {
    public void rotate(int[] nums, int k) {
        k %= nums.length;
        exchange(nums, 0 , nums.length -1);
        exchange(nums, 0 , k -1 );
        exchange(nums, k, nums.length -1);
    }
    public void exchange(int[] arr , int left , int right){
        while(left <= right){
            int temp =arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
}

这篇文章会合并到算法通关村第三关白银练习里 . 

你可能感兴趣的:(算法村,算法,java,数据结构)